home *** CD-ROM | disk | FTP | other *** search
MacBinary | 1995-02-11 | 24.9 KB | [ TEXT/MMCC]
open in: MacOS 8.1
extracted
|
Win98
extracted
|
DOS
extracted
browse contents |
view JSON data
|
view as text
This file was processed as: MacBinary
(archive/macBinary ).
Confidence Program Detection Match Type Support
66%
dexvert
Compact Compressed (Unix) (archive/compact)
ext
Supported
1%
dexvert
MacBinary (archive/macBinary)
fallback
Supported
1%
dexvert
Text File (text/txt)
fallback
Supported
100%
file
MacBinary II, inited, Sat Feb 11 15:58:34 1995, modified Sat Feb 11 15:58:34 1995, creator 'MMCC', type ASCII, 24726 bytes "thread.c" , at 0x6116 410 bytes resource
default (weak)
99%
file
data
default
74%
TrID
Macintosh plain text (MacBinary)
default
25%
TrID
MacBinary 2
default (weak)
100%
dearkID
deark: macbinary
default
100%
siegfried
fmt/1762 MacBinary (II)
default
100%
lsar
MacBinary
default
id metadata key value macFileType [ TEXT] macFileCreator [ MMCC]
hex view +--------+-------------------------+-------------------------+--------+--------+ |00000000| 00 08 74 68 72 65 61 64 | 2e 63 00 00 00 00 00 00 |..thread|.c......| |00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00000040| 00 54 45 58 54 4d 4d 43 | 43 01 00 00 00 00 00 00 |.TEXTMMC|C.......| |00000050| 00 00 00 00 00 60 96 00 | 00 01 9a ab 62 d5 7a ab |.....`..|....b.z.| |00000060| 62 d5 7a 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |b.z.....|........| |00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 e6 01 00 00 |........|........| |00000080| 2f 2a 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/*------|--------| |00000090| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000000a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000000b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000000c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 0d |--------|------..| |000000d0| 09 74 68 72 65 61 64 2e | 63 0d 0d 09 54 68 69 73 |.thread.|c...This| |000000e0| 20 6d 6f 64 75 6c 65 20 | 68 61 6e 64 6c 65 73 20 | module |handles | |000000f0| 73 6f 72 74 69 6e 67 20 | 73 75 62 6a 65 63 74 20 |sorting |subject | |00000100| 77 69 6e 64 6f 77 73 20 | 69 6e 74 6f 20 74 68 72 |windows |into thr| |00000110| 65 61 64 73 2e 0d 09 0d | 09 43 6f 70 79 72 69 67 |eads....|.Copyrig| |00000120| 68 74 20 a9 20 31 39 39 | 34 2d 31 39 39 35 2c 20 |ht . 199|4-1995, | |00000130| 4e 6f 72 74 68 77 65 73 | 74 65 72 6e 20 55 6e 69 |Northwes|tern Uni| |00000140| 76 65 72 73 69 74 79 2e | 0d 0d 2d 2d 2d 2d 2d 2d |versity.|..------| |00000150| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000160| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000170| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000180| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000190| 2d 2d 2d 2d 2d 2d 2a 2f | 0d 0d 23 69 6e 63 6c 75 |------*/|..#inclu| |000001a0| 64 65 20 3c 73 74 72 69 | 6e 67 2e 68 3e 0d 23 69 |de <stri|ng.h>.#i| |000001b0| 6e 63 6c 75 64 65 20 3c | 63 74 79 70 65 2e 68 3e |nclude <|ctype.h>| |000001c0| 0d 23 69 6e 63 6c 75 64 | 65 20 3c 73 74 64 69 6f |.#includ|e <stdio| |000001d0| 2e 68 3e 0d 0d 23 69 6e | 63 6c 75 64 65 20 22 67 |.h>..#in|clude "g| |000001e0| 6c 6f 62 2e 68 22 0d 23 | 69 6e 63 6c 75 64 65 20 |lob.h".#|include | |000001f0| 22 74 68 72 65 61 64 2e | 68 22 0d 23 69 6e 63 6c |"thread.|h".#incl| |00000200| 75 64 65 20 22 71 73 6f | 72 74 2e 68 22 0d 23 69 |ude "qso|rt.h".#i| |00000210| 6e 63 6c 75 64 65 20 22 | 6e 65 77 73 77 61 74 63 |nclude "|newswatc| |00000220| 68 65 72 2e 68 22 0d 23 | 69 6e 63 6c 75 64 65 20 |her.h".#|include | |00000230| 22 73 74 72 75 74 69 6c | 2e 68 22 0d 23 69 6e 63 |"strutil|.h".#inc| |00000240| 6c 75 64 65 20 22 6d 65 | 6d 75 74 69 6c 2e 68 22 |lude "me|mutil.h"| |00000250| 0d 23 69 6e 63 6c 75 64 | 65 20 22 64 69 61 6c 6f |.#includ|e "dialo| |00000260| 67 2e 68 22 0d 23 69 6e | 63 6c 75 64 65 20 22 68 |g.h".#in|clude "h| |00000270| 65 61 64 65 72 2e 68 22 | 0d 23 69 6e 63 6c 75 64 |eader.h"|.#includ| |00000280| 65 20 22 63 61 63 68 65 | 2e 68 22 0d 0d 0d 0d 74 |e "cache|.h"....t| |00000290| 79 70 65 64 65 66 20 73 | 74 72 75 63 74 20 54 53 |ypedef s|truct TS| |000002a0| 6f 72 74 49 6e 66 6f 20 | 7b 0d 09 63 68 61 72 20 |ortInfo |{..char | |000002b0| 2a 63 61 6e 6f 6e 3b 09 | 09 09 09 2f 2a 20 70 74 |*canon;.|.../* pt| |000002c0| 72 20 74 6f 20 63 61 6e | 6f 6e 69 63 61 6c 20 73 |r to can|onical s| |000002d0| 75 62 6a 65 63 74 20 73 | 74 72 69 6e 67 20 2a 2f |ubject s|tring */| |000002e0| 0d 09 54 53 75 62 6a 65 | 63 74 20 2a 73 75 62 6a |..TSubje|ct *subj| |000002f0| 65 63 74 3b 09 09 09 2f | 2a 20 70 74 72 20 74 6f |ect;.../|* ptr to| |00000300| 20 73 75 62 6a 65 63 74 | 20 61 72 72 61 79 20 65 | subject| array e| |00000310| 6c 65 6d 65 6e 74 20 2a | 2f 0d 09 73 68 6f 72 74 |lement *|/..short| |00000320| 20 69 6e 64 65 78 3b 09 | 09 09 09 2f 2a 20 69 6e | index;.|.../* in| |00000330| 64 65 78 20 69 6e 20 73 | 75 62 6a 65 63 74 20 61 |dex in s|ubject a| |00000340| 72 72 61 79 20 2a 2f 0d | 09 6c 6f 6e 67 20 6e 75 |rray */.|.long nu| |00000350| 6d 62 65 72 3b 09 09 09 | 09 2f 2a 20 61 72 74 69 |mber;...|./* arti| |00000360| 63 6c 65 20 6e 75 6d 62 | 65 72 20 2a 2f 0d 09 73 |cle numb|er */..s| |00000370| 68 6f 72 74 20 70 61 72 | 74 4e 75 6d 3b 09 09 09 |hort par|tNum;...| |00000380| 09 2f 2a 20 70 61 72 74 | 20 6e 75 6d 62 65 72 2c |./* part| number,| |00000390| 20 6f 72 20 30 78 37 66 | 66 66 20 69 66 20 6e 6f | or 0x7f|ff if no| |000003a0| 74 20 61 20 70 61 72 74 | 20 2a 2f 0d 09 73 68 6f |t a part| */..sho| |000003b0| 72 74 20 6e 75 6d 50 61 | 72 74 73 3b 09 09 09 09 |rt numPa|rts;....| |000003c0| 2f 2a 20 6e 75 6d 62 65 | 72 20 6f 66 20 70 61 72 |/* numbe|r of par| |000003d0| 74 73 2c 20 6f 72 20 30 | 78 37 66 66 66 20 69 66 |ts, or 0|x7fff if| |000003e0| 20 6e 6f 74 20 61 20 70 | 61 72 74 20 2a 2f 0d 09 | not a p|art */..| |000003f0| 6c 6f 6e 67 20 74 68 72 | 65 61 64 48 65 61 64 4e |long thr|eadHeadN| |00000400| 75 6d 62 65 72 3b 09 09 | 2f 2a 20 61 72 74 69 63 |umber;..|/* artic| |00000410| 6c 65 20 6e 75 6d 62 65 | 72 20 6f 66 20 66 69 72 |le numbe|r of fir| |00000420| 73 74 20 61 72 74 69 63 | 6c 65 20 69 6e 20 74 68 |st artic|le in th| |00000430| 72 65 61 64 20 20 2a 2f | 0d 09 73 68 6f 72 74 20 |read */|..short | |00000440| 74 68 72 65 61 64 4f 72 | 64 69 6e 61 6c 3b 09 09 |threadOr|dinal;..| |00000450| 2f 2a 20 61 72 74 69 63 | 6c 65 20 6f 72 64 69 6e |/* artic|le ordin| |00000460| 61 6c 20 69 6e 20 74 68 | 72 65 61 64 20 28 31 2c |al in th|read (1,| |00000470| 32 2c 33 2c 2e 2e 2e 29 | 20 2a 2f 0d 09 42 6f 6f |2,3,...)| */..Boo| |00000480| 6c 65 61 6e 20 66 72 6f | 6d 43 61 63 68 65 3b 09 |lean fro|mCache;.| |00000490| 09 09 2f 2a 20 74 72 75 | 65 20 69 66 20 66 72 6f |../* tru|e if fro| |000004a0| 6d 20 63 61 63 68 65 20 | 2a 2f 0d 09 42 6f 6f 6c |m cache |*/..Bool| |000004b0| 65 61 6e 20 70 6f 74 65 | 6e 74 69 61 6c 50 61 72 |ean pote|ntialPar| |000004c0| 74 3b 09 09 2f 2a 20 74 | 72 75 65 20 69 66 20 70 |t;../* t|rue if p| |000004d0| 6f 74 65 6e 74 69 61 6c | 20 70 61 72 74 20 2a 2f |otential| part */| |000004e0| 0d 7d 20 54 53 6f 72 74 | 49 6e 66 6f 2c 20 2a 54 |.} TSort|Info, *T| |000004f0| 53 6f 72 74 49 6e 66 6f | 50 74 72 2c 20 2a 2a 54 |SortInfo|Ptr, **T| |00000500| 53 6f 72 74 49 6e 66 6f | 48 61 6e 64 6c 65 3b 0d |SortInfo|Handle;.| |00000510| 0d 0d 0d 73 74 61 74 69 | 63 20 43 53 74 72 32 35 |...stati|c CStr25| |00000520| 35 20 67 47 72 6f 75 70 | 4e 61 6d 65 3b 09 09 09 |5 gGroup|Name;...| |00000530| 09 2f 2a 20 67 72 6f 75 | 70 20 6e 61 6d 65 20 2a |./* grou|p name *| |00000540| 2f 0d 73 74 61 74 69 63 | 20 48 61 6e 64 6c 65 20 |/.static| Handle | |00000550| 67 53 74 72 69 6e 67 73 | 3b 09 09 09 09 09 2f 2a |gStrings|;...../*| |00000560| 20 68 61 6e 64 6c 65 20 | 74 6f 20 73 75 62 6a 65 | handle |to subje| |00000570| 63 74 20 61 6e 64 20 61 | 75 74 68 6f 72 20 73 74 |ct and a|uthor st| |00000580| 72 69 6e 67 73 20 2a 2f | 0d 73 74 61 74 69 63 20 |rings */|.static | |00000590| 42 6f 6f 6c 65 61 6e 20 | 67 50 61 72 65 6e 74 49 |Boolean |gParentI| |000005a0| 73 55 73 65 72 47 72 6f | 75 70 4c 69 73 74 3b 09 |sUserGro|upList;.| |000005b0| 2f 2a 20 74 72 75 65 20 | 69 66 20 70 61 72 65 6e |/* true |if paren| |000005c0| 74 20 77 69 6e 64 6f 77 | 20 69 73 20 75 73 65 72 |t window| is user| |000005d0| 20 67 72 6f 75 70 20 6c | 69 73 74 20 2a 2f 0d 0d | group l|ist */..| |000005e0| 0d 0d 2f 2a 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |../*----|--------| |000005f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000600| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000610| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000620| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000630| 0d 09 49 73 50 61 72 74 | 54 61 69 6c 20 0d 09 0d |..IsPart|Tail ...| |00000640| 09 43 68 65 63 6b 20 73 | 74 72 69 6e 67 20 66 6f |.Check s|tring fo| |00000650| 72 20 74 61 69 6c 20 6f | 66 20 70 61 72 74 20 69 |r tail o|f part i| |00000660| 6e 64 69 63 61 74 6f 72 | 2e 0d 09 0d 09 45 6e 74 |ndicator|.....Ent| |00000670| 72 79 3a 09 78 20 3d 20 | 70 6f 69 6e 74 65 72 20 |ry:.x = |pointer | |00000680| 74 6f 20 73 74 72 69 6e | 67 2e 0d 09 09 09 6c 61 |to strin|g.....la| |00000690| 73 74 43 68 61 72 20 3d | 20 72 65 71 75 69 72 65 |stChar =| require| |000006a0| 64 20 74 72 61 69 6c 69 | 6e 67 20 63 68 61 72 61 |d traili|ng chara| |000006b0| 63 74 65 72 2c 20 6f 72 | 20 30 20 69 66 20 6e 6f |cter, or| 0 if no| |000006c0| 6e 65 2e 0d 09 09 09 0d | 09 45 78 69 74 3a 09 66 |ne......|.Exit:.f| |000006d0| 75 6e 63 74 69 6f 6e 20 | 72 65 73 75 6c 74 20 3d |unction |result =| |000006e0| 20 74 72 75 65 20 69 66 | 20 65 6e 64 20 6f 66 20 | true if| end of | |000006f0| 70 61 72 74 20 69 6e 64 | 69 63 61 74 6f 72 2c 20 |part ind|icator, | |00000700| 69 6e 20 77 68 69 63 68 | 20 63 61 73 65 3a 0d 09 |in which| case:..| |00000710| 09 09 09 2a 65 6e 64 20 | 3d 20 70 6f 69 6e 74 65 |...*end |= pointe| |00000720| 72 20 74 6f 20 63 68 61 | 72 61 63 74 65 72 20 66 |r to cha|racter f| |00000730| 6f 6c 6c 6f 77 69 6e 67 | 20 65 6e 64 20 6f 66 20 |ollowing| end of | |00000740| 70 61 72 74 20 69 6e 64 | 69 63 61 74 6f 72 2e 0d |part ind|icator..| |00000750| 09 09 09 09 2a 70 61 72 | 74 4e 75 6d 20 3d 20 70 |....*par|tNum = p| |00000760| 61 72 74 20 6e 75 6d 62 | 65 72 2e 0d 09 09 09 09 |art numb|er......| |00000770| 2a 6e 75 6d 50 61 72 74 | 73 20 3d 20 6e 75 6d 62 |*numPart|s = numb| |00000780| 65 72 20 6f 66 20 70 61 | 72 74 73 2e 0d 2d 2d 2d |er of pa|rts..---| |00000790| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000007a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000007b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000007c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000007d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 73 74 61 |--------|-*/..sta| |000007e0| 74 69 63 20 42 6f 6f 6c | 65 61 6e 20 49 73 50 61 |tic Bool|ean IsPa| |000007f0| 72 74 54 61 69 6c 20 28 | 63 68 61 72 20 2a 78 2c |rtTail (|char *x,| |00000800| 20 63 68 61 72 20 6c 61 | 73 74 43 68 61 72 2c 20 | char la|stChar, | |00000810| 63 68 61 72 20 2a 2a 65 | 6e 64 2c 20 73 68 6f 72 |char **e|nd, shor| |00000820| 74 20 2a 70 61 72 74 4e | 75 6d 2c 0d 09 73 68 6f |t *partN|um,..sho| |00000830| 72 74 20 2a 6e 75 6d 50 | 61 72 74 73 29 0d 7b 0d |rt *numP|arts).{.| |00000840| 09 73 68 6f 72 74 20 70 | 4e 75 6d 2c 20 6e 75 6d |.short p|Num, num| |00000850| 50 3b 0d 0d 09 77 68 69 | 6c 65 20 28 69 73 4c 57 |P;...whi|le (isLW| |00000860| 53 50 28 2a 78 29 29 20 | 78 2b 2b 3b 0d 09 69 66 |SP(*x)) |x++;..if| |00000870| 20 28 21 69 73 64 69 67 | 69 74 28 2a 78 29 29 20 | (!isdig|it(*x)) | |00000880| 72 65 74 75 72 6e 20 66 | 61 6c 73 65 3b 0d 09 70 |return f|alse;..p| |00000890| 4e 75 6d 20 3d 20 43 72 | 61 63 6b 4e 75 6d 28 26 |Num = Cr|ackNum(&| |000008a0| 78 29 3b 0d 09 77 68 69 | 6c 65 20 28 69 73 4c 57 |x);..whi|le (isLW| |000008b0| 53 50 28 2a 78 29 29 20 | 78 2b 2b 3b 0d 09 69 66 |SP(*x)) |x++;..if| |000008c0| 20 28 2a 78 20 3d 3d 20 | 27 2f 27 20 7c 7c 20 2a | (*x == |'/' || *| |000008d0| 78 20 3d 3d 20 27 7c 27 | 20 7c 7c 20 2a 78 20 3d |x == '|'| || *x =| |000008e0| 3d 20 27 5c 5c 27 29 20 | 7b 0d 09 09 78 2b 2b 3b |= '\\') |{...x++;| |000008f0| 0d 09 7d 20 65 6c 73 65 | 20 69 66 20 28 73 74 72 |..} else| if (str| |00000900| 6e 63 6d 70 28 78 2c 20 | 22 6f 66 22 2c 20 32 29 |ncmp(x, |"of", 2)| |00000910| 20 3d 3d 20 30 29 20 7b | 0d 09 09 78 20 2b 3d 20 | == 0) {|...x += | |00000920| 32 3b 0d 09 7d 20 65 6c | 73 65 20 7b 0d 09 09 72 |2;..} el|se {...r| |00000930| 65 74 75 72 6e 20 66 61 | 6c 73 65 3b 0d 09 7d 0d |eturn fa|lse;..}.| |00000940| 09 77 68 69 6c 65 20 28 | 69 73 4c 57 53 50 28 2a |.while (|isLWSP(*| |00000950| 78 29 29 20 78 2b 2b 3b | 0d 09 69 66 20 28 21 69 |x)) x++;|..if (!i| |00000960| 73 64 69 67 69 74 28 2a | 78 29 29 20 72 65 74 75 |sdigit(*|x)) retu| |00000970| 72 6e 20 66 61 6c 73 65 | 3b 0d 09 6e 75 6d 50 20 |rn false|;..numP | |00000980| 3d 20 43 72 61 63 6b 4e | 75 6d 28 26 78 29 3b 0d |= CrackN|um(&x);.| |00000990| 09 69 66 20 28 70 4e 75 | 6d 20 3e 20 6e 75 6d 50 |.if (pNu|m > numP| |000009a0| 29 20 72 65 74 75 72 6e | 20 66 61 6c 73 65 3b 0d |) return| false;.| |000009b0| 09 69 66 20 28 6c 61 73 | 74 43 68 61 72 20 21 3d |.if (las|tChar !=| |000009c0| 20 30 29 20 7b 0d 09 09 | 77 68 69 6c 65 20 28 69 | 0) {...|while (i| |000009d0| 73 4c 57 53 50 28 2a 78 | 29 29 20 78 2b 2b 3b 0d |sLWSP(*x|)) x++;.| |000009e0| 09 09 69 66 20 28 2a 78 | 20 21 3d 20 6c 61 73 74 |..if (*x| != last| |000009f0| 43 68 61 72 29 20 72 65 | 74 75 72 6e 20 66 61 6c |Char) re|turn fal| |00000a00| 73 65 3b 0d 09 09 78 2b | 2b 3b 0d 09 7d 0d 09 77 |se;...x+|+;..}..w| |00000a10| 68 69 6c 65 20 28 69 73 | 4c 57 53 50 28 2a 78 29 |hile (is|LWSP(*x)| |00000a20| 29 20 78 2b 2b 3b 0d 09 | 2a 65 6e 64 20 3d 20 78 |) x++;..|*end = x| |00000a30| 3b 0d 09 2a 70 61 72 74 | 4e 75 6d 20 3d 20 70 4e |;..*part|Num = pN| |00000a40| 75 6d 3b 0d 09 2a 6e 75 | 6d 50 61 72 74 73 20 3d |um;..*nu|mParts =| |00000a50| 20 6e 75 6d 50 3b 0d 09 | 72 65 74 75 72 6e 20 74 | numP;..|return t| |00000a60| 72 75 65 3b 0d 7d 0d 0d | 0d 0d 2f 2a 2d 2d 2d 2d |rue;.}..|../*----| |00000a70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000a80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000a90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000aa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00000ab0| 2d 2d 2d 2d 2d 2d 2d 2d | 0d 09 43 68 65 63 6b 46 |--------|..CheckF| |00000ac0| 6f 72 50 61 72 74 49 6e | 64 69 63 61 74 6f 72 20 |orPartIn|dicator | |00000ad0| 0d 09 0d 09 43 68 65 63 | 6b 20 73 75 62 6a 65 63 |....Chec|k subjec| |00000ae0| 74 20 66 6f 72 20 70 61 | 72 74 20 69 6e 64 69 63 |t for pa|rt indic| |00000af0| 61 74 6f 72 2e 0d 09 0d | 09 45 6e 74 72 79 3a 09 |ator....|.Entry:.| |00000b00| 70 20 3d 20 70 6f 69 6e | 74 65 72 20 74 6f 20 73 |p = poin|ter to s| |00000b10| 6f 72 74 20 69 6e 66 6f | 20 72 65 63 6f 72 64 2e |ort info| record.| |00000b20| 0d 09 09 09 0d 09 45 78 | 69 74 3a 09 49 66 20 74 |......Ex|it:.If t| |00000b30| 68 65 20 73 75 62 6a 65 | 63 74 20 63 6f 6e 74 61 |he subje|ct conta| |00000b40| 69 6e 73 20 61 20 70 61 | 72 74 20 69 6e 64 69 63 |ins a pa|rt indic| |00000b50| 61 74 6f 72 3a 0d 09 09 | 09 09 70 2d 3e 70 61 72 |ator:...|..p->par| |00000b60| 74 4e 75 6d 20 3d 20 70 | 61 72 74 20 6e 75 6d 62 |tNum = p|art numb| |00000b70| 65 72 2e 0d 09 09 09 09 | 70 2d 3e 6e 75 6d 50 61 |er......|p->numPa| |00000b80| 72 74 73 20 3d 20 6e 75 | 6d 62 65 72 20 6f 66 20 |rts = nu|mber of | |00000b90| 70 61 72 74 73 2e 0d 09 | 09 09 09 70 2d 3e 70 6f |parts...|...p->po| |00000ba0| 74 65 6e 74 69 61 6c 50 | 61 72 74 20 3d 20 74 72 |tentialP|art = tr| |00000bb0| 75 65 20 69 66 20 70 6f | 74 65 6e 74 69 61 6c 20 |ue if po|tential | |00000bc0| 70 61 72 74 2e 0d 09 09 | 09 09 70 61 72 74 20 69 |part....|..part i| |00000bd0| 6e 64 69 63 61 74 6f 72 | 20 73 75 62 73 74 72 69 |ndicator| substri| |00000be0| 6e 67 20 73 74 72 69 70 | 70 65 64 20 66 72 6f 6d |ng strip|ped from| |00000bf0| 20 70 2d 3e 63 61 6e 6f | 6e 2e 0d 09 09 09 09 69 | p->cano|n......i| |00000c00| 66 20 74 68 65 20 70 61 | 72 74 20 69 6e 64 69 63 |f the pa|rt indic| |00000c10| 61 74 6f 72 20 69 73 20 | 70 72 65 63 65 64 65 64 |ator is |preceded| |00000c20| 20 62 79 20 6e 6f 6e 2d | 77 68 69 74 65 20 73 70 | by non-|white sp| |00000c30| 61 63 65 2c 20 74 68 65 | 20 0d 09 09 09 09 09 74 |ace, the| ......t| |00000c40| 61 69 6c 20 6f 66 20 74 | 68 65 20 73 75 62 6a 65 |ail of t|he subje| |00000c50| 63 74 20 69 73 20 61 6c | 73 6f 20 73 74 72 69 70 |ct is al|so strip| |00000c60| 70 65 64 20 66 72 6f 6d | 20 70 2d 3e 63 61 6e 6f |ped from| p->cano| |00000c70| 6e 2e 0d 09 09 09 09 6e | 75 6d 62 65 72 20 6f 66 |n......n|umber of| |00000c80| 20 70 61 72 74 73 20 61 | 70 70 65 6e 64 65 64 20 | parts a|ppended | |00000c90| 74 6f 20 65 6e 64 20 6f | 66 20 70 2d 3e 63 61 6e |to end o|f p->can| |00000ca0| 6f 6e 2e 0d 09 09 09 09 | 0d 09 50 61 72 74 20 69 |on......|..Part i| |00000cb0| 6e 64 69 63 61 74 6f 72 | 73 20 61 72 65 20 64 65 |ndicator|s are de| |00000cc0| 66 69 6e 65 64 20 61 73 | 20 66 6f 6c 6c 6f 77 73 |fined as| follows| |00000cd0| 2c 20 75 73 69 6e 67 20 | 74 68 65 20 6e 6f 74 61 |, using |the nota| |00000ce0| 74 69 6f 6e 20 6f 66 20 | 52 46 43 20 38 32 32 3a |tion of |RFC 822:| |00000cf0| 0d 0d 09 20 20 20 20 70 | 61 72 74 2d 69 6e 64 69 |... p|art-indi| |00000d00| 63 61 74 6f 72 20 3d 20 | 22 70 61 72 74 22 20 70 |cator = |"part" p| |00000d10| 61 72 74 2d 6e 2d 6f 66 | 2d 6d 0d 09 20 20 20 20 |art-n-of|-m.. | |00000d20| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 2f | | /| |00000d30| 20 22 28 22 20 70 61 72 | 74 2d 6e 2d 6f 66 2d 6d | "(" par|t-n-of-m| |00000d40| 20 22 29 22 0d 09 20 20 | 20 20 20 20 20 20 20 20 | ")".. | | |00000d50| 20 20 20 20 20 20 20 20 | 20 2f 20 22 5b 22 20 70 | | / "[" p| |00000d60| 61 72 74 2d 6e 2d 6f 66 | 2d 6d 20 22 5d 22 0d 09 |art-n-of|-m "]"..| |00000d70| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | | |00000d80| 20 20 20 2f 20 22 7b 22 | 20 70 61 72 74 2d 6e 2d | / "{"| part-n-| |00000d90| 6f 66 2d 6d 20 22 7d 22 | 0d 09 20 20 20 20 20 20 |of-m "}"|.. | |00000da0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 2f 20 22 | | / "| |00000db0| 3c 22 20 70 61 72 74 2d | 6e 2d 6f 66 2d 6d 20 22 |<" part-|n-of-m "| |00000dc0| 3e 22 0d 09 0d 09 20 20 | 20 20 70 61 72 74 2d 6e |>".... | part-n| |00000dd0| 2d 6f 66 2d 6d 20 3d 20 | 6e 75 6d 62 65 72 20 22 |-of-m = |number "| |00000de0| 6f 66 22 20 6e 75 6d 62 | 65 72 0d 09 20 20 20 20 |of" numb|er.. | |00000df0| 20 20 20 20 20 20 20 20 | 20 20 20 20 2f 20 6e 75 | | / nu| |00000e00| 6d 62 65 72 20 22 2f 22 | 20 6e 75 6d 62 65 72 0d |mber "/"| number.| |00000e10| 09 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | | |00000e20| 20 2f 20 6e 75 6d 62 65 | 72 20 22 7c 22 20 6e 75 | / numbe|r "|" nu| |00000e30| 6d 62 65 72 20 20 20 20 | 20 20 20 20 0d 09 20 20 |mber | .. | |00000e40| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2f 20 | | / | |00000e50| 6e 75 6d 62 65 72 20 22 | 5c 22 20 6e 75 6d 62 65 |number "|\" numbe| |00000e60| 72 09 09 3b 20 66 69 72 | 73 74 20 6e 75 6d 62 65 |r..; fir|st numbe| |00000e70| 72 20 3c 3d 20 73 65 63 | 6f 6e 64 20 6e 75 6d 62 |r <= sec|ond numb| |00000e80| 65 72 0d 0d 09 09 6e 75 | 6d 62 65 72 20 3d 20 31 |er....nu|mber = 1| |00000e90| 2a 44 49 47 49 54 0d 09 | 09 0d 09 49 66 20 74 68 |*DIGIT..|...If th| |00000ea0| 65 20 73 75 62 6a 65 63 | 74 20 63 6f 6e 74 61 69 |e subjec|t contai| |00000eb0| 6e 73 20 61 20 70 61 72 | 74 20 69 6e 64 69 63 61 |ns a par|t indica| |00000ec0| 74 6f 72 2c 20 61 6e 79 | 20 73 75 62 6a 65 63 74 |tor, any| subject| |00000ed0| 20 70 72 65 66 69 78 20 | 69 6e 20 74 68 65 20 0d | prefix |in the .| |00000ee0| 09 66 6f 6c 6c 6f 77 69 | 6e 67 20 66 6f 72 6d 61 |.followi|ng forma| |00000ef0| 74 20 69 73 20 61 6c 73 | 6f 20 73 74 72 69 70 70 |t is als|o stripp| |00000f00| 65 64 20 28 66 6f 72 20 | 74 68 65 20 63 6f 6d 70 |ed (for |the comp| |00000f10| 2e 62 69 6e 61 72 69 65 | 73 2e 69 62 6d 2e 2a 20 |.binarie|s.ibm.* | |00000f20| 67 72 6f 75 70 73 29 3a | 0d 0d 09 09 22 76 22 20 |groups):|...."v" | |00000f30| 6e 75 6d 62 65 72 20 22 | 69 22 20 6e 75 6d 62 65 |number "|i" numbe| |00000f40| 72 20 22 3a 22 0d 09 09 | 0d 09 41 20 22 70 6f 74 |r ":"...|..A "pot| |00000f50| 65 6e 74 69 61 6c 22 20 | 70 61 72 74 20 69 73 20 |ential" |part is | |00000f60| 61 20 22 70 61 72 74 2d | 6e 2d 6f 66 2d 6d 22 2c |a "part-|n-of-m",| |00000f70| 20 65 2e 67 2e 2c 20 61 | 20 70 61 72 74 20 69 6e | e.g., a| part in| |00000f80| 64 69 63 61 74 6f 72 20 | 77 69 74 68 6f 75 74 20 |dicator |without | |00000f90| 74 68 65 0d 09 77 6f 72 | 64 20 22 70 61 72 74 22 |the..wor|d "part"| |00000fa0| 20 69 6e 20 66 72 6f 6e | 74 20 6f 72 20 74 68 65 | in fron|t or the| |00000fb0| 20 62 72 61 63 6b 65 74 | 73 2e 20 41 20 22 70 6f | bracket|s. A "po| |00000fc0| 74 65 6e 74 69 61 6c 22 | 20 70 61 72 74 20 69 73 |tential"| part is| |00000fd0| 20 73 70 65 63 69 61 6c | 20 63 61 73 65 64 2e 0d | special| cased..| |00000fe0| 09 49 74 20 69 73 20 63 | 6f 6e 73 69 64 65 72 65 |.It is c|onsidere| |00000ff0| 64 20 74 6f 20 62 65 20 | 61 20 70 61 72 74 20 69 |d to be |a part i| |00001000| 66 20 61 6e 64 20 6f 6e | 6c 79 20 69 66 20 73 6f |f and on|ly if so| |00001010| 6d 65 20 6f 74 68 65 72 | 20 6d 61 74 63 68 69 6e |me other| matchin| |00001020| 67 20 70 61 72 74 20 69 | 73 0d 09 61 6c 73 6f 20 |g part i|s..also | |00001030| 70 72 65 73 65 6e 74 20 | 69 6e 20 74 68 65 20 73 |present |in the s| |00001040| 75 62 6a 65 63 74 20 6c | 69 73 74 2e 0d 2d 2d 2d |ubject l|ist..---| |00001050| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001060| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001070| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001080| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001090| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 73 74 61 |--------|-*/..sta| |000010a0| 74 69 63 20 76 6f 69 64 | 20 43 68 65 63 6b 46 6f |tic void| CheckFo| |000010b0| 72 50 61 72 74 49 6e 64 | 69 63 61 74 6f 72 20 28 |rPartInd|icator (| |000010c0| 54 53 6f 72 74 49 6e 66 | 6f 50 74 72 20 70 29 0d |TSortInf|oPtr p).| |000010d0| 7b 0d 09 63 68 61 72 20 | 2a 78 2c 20 2a 65 6e 64 |{..char |*x, *end| |000010e0| 2c 20 2a 79 3b 0d 09 73 | 68 6f 72 74 20 70 61 72 |, *y;..s|hort par| |000010f0| 74 4e 75 6d 2c 20 6e 75 | 6d 50 61 72 74 73 3b 0d |tNum, nu|mParts;.| |00001100| 09 42 6f 6f 6c 65 61 6e | 20 70 6f 74 65 6e 74 69 |.Boolean| potenti| |00001110| 61 6c 50 61 72 74 20 3d | 20 66 61 6c 73 65 3b 0d |alPart =| false;.| |00001120| 09 0d 09 78 20 3d 20 70 | 2d 3e 63 61 6e 6f 6e 3b |...x = p|->canon;| |00001130| 0d 09 77 68 69 6c 65 20 | 28 74 72 75 65 29 20 7b |..while |(true) {| |00001140| 0d 09 09 78 20 3d 20 73 | 74 72 70 62 72 6b 28 78 |...x = s|trpbrk(x| |00001150| 2c 20 22 28 5b 7b 3c 70 | 30 31 32 33 34 35 36 37 |, "([{<p|01234567| |00001160| 38 39 22 29 3b 0d 09 09 | 69 66 20 28 78 20 3d 3d |89");...|if (x ==| |00001170| 20 6e 69 6c 29 20 72 65 | 74 75 72 6e 3b 0d 09 09 | nil) re|turn;...| |00001180| 69 66 20 28 2a 78 20 3d | 3d 20 27 28 27 29 20 7b |if (*x =|= '(') {| |00001190| 0d 09 09 09 69 66 20 28 | 49 73 50 61 72 74 54 61 |....if (|IsPartTa| |000011a0| 69 6c 28 78 2b 31 2c 20 | 27 29 27 2c 20 26 65 6e |il(x+1, |')', &en| |000011b0| 64 2c 20 26 70 61 72 74 | 4e 75 6d 2c 20 26 6e 75 |d, &part|Num, &nu| |000011c0| 6d 50 61 72 74 73 29 29 | 20 62 72 65 61 6b 3b 0d |mParts))| break;.| |000011d0| 09 09 7d 20 65 6c 73 65 | 20 69 66 20 28 2a 78 20 |..} else| if (*x | |000011e0| 3d 3d 20 27 5b 27 29 20 | 7b 0d 09 09 09 69 66 20 |== '[') |{....if | |000011f0| 28 49 73 50 61 72 74 54 | 61 69 6c 28 78 2b 31 2c |(IsPartT|ail(x+1,| |00001200| 20 27 5d 27 2c 20 26 65 | 6e 64 2c 20 26 70 61 72 | ']', &e|nd, &par| |00001210| 74 4e 75 6d 2c 20 26 6e | 75 6d 50 61 72 74 73 29 |tNum, &n|umParts)| |00001220| 29 20 62 72 65 61 6b 3b | 0d 09 09 7d 20 65 6c 73 |) break;|...} els| |00001230| 65 20 69 66 20 28 2a 78 | 20 3d 3d 20 27 7b 27 29 |e if (*x| == '{')| |00001240| 20 7b 0d 09 09 09 69 66 | 20 28 49 73 50 61 72 74 | {....if| (IsPart| |00001250| 54 61 69 6c 28 78 2b 31 | 2c 20 27 7d 27 2c 20 26 |Tail(x+1|, '}', &| |00001260| 65 6e 64 2c 20 26 70 61 | 72 74 4e 75 6d 2c 20 26 |end, &pa|rtNum, &| |00001270| 6e 75 6d 50 61 72 74 73 | 29 29 20 62 72 65 61 6b |numParts|)) break| |00001280| 3b 0d 09 09 7d 20 65 6c | 73 65 20 69 66 20 28 2a |;...} el|se if (*| |00001290| 78 20 3d 3d 20 27 3c 27 | 29 20 7b 0d 09 09 09 69 |x == '<'|) {....i| |000012a0| 66 20 28 49 73 50 61 72 | 74 54 61 69 6c 28 78 2b |f (IsPar|tTail(x+| |000012b0| 31 2c 20 27 3e 27 2c 20 | 26 65 6e 64 2c 20 26 70 |1, '>', |&end, &p| |000012c0| 61 72 74 4e 75 6d 2c 20 | 26 6e 75 6d 50 61 72 74 |artNum, |&numPart| |000012d0| 73 29 29 20 62 72 65 61 | 6b 3b 0d 09 09 7d 20 65 |s)) brea|k;...} e| |000012e0| 6c 73 65 20 69 66 20 28 | 2a 78 20 3d 3d 20 27 70 |lse if (|*x == 'p| |000012f0| 27 20 26 26 20 73 74 72 | 6e 63 6d 70 28 78 2c 20 |' && str|ncmp(x, | |00001300| 22 70 61 72 74 22 2c 20 | 34 29 20 3d 3d 20 30 29 |"part", |4) == 0)| |00001310| 20 20 7b 0d 09 09 09 69 | 66 20 28 49 73 50 61 72 | {....i|f (IsPar| |00001320| 74 54 61 69 6c 28 78 2b | 34 2c 20 30 2c 20 26 65 |tTail(x+|4, 0, &e| |00001330| 6e 64 2c 20 26 70 61 72 | 74 4e 75 6d 2c 20 26 6e |nd, &par|tNum, &n| |00001340| 75 6d 50 61 72 74 73 29 | 29 20 62 72 65 61 6b 3b |umParts)|) break;| |00001350| 0d 09 09 7d 20 65 6c 73 | 65 20 7b 0d 09 09 09 69 |...} els|e {....i| |00001360| 66 20 28 49 73 50 61 72 | 74 54 61 69 6c 28 78 2c |f (IsPar|tTail(x,| |00001370| 20 30 2c 20 26 65 6e 64 | 2c 20 26 70 61 72 74 4e | 0, &end|, &partN| |00001380| 75 6d 2c 20 26 6e 75 6d | 50 61 72 74 73 29 29 20 |um, &num|Parts)) | |00001390| 7b 0d 09 09 09 09 70 6f | 74 65 6e 74 69 61 6c 50 |{.....po|tentialP| |000013a0| 61 72 74 20 3d 20 74 72 | 75 65 3b 0d 09 09 09 09 |art = tr|ue;.....| |000013b0| 62 72 65 61 6b 3b 0d 09 | 09 09 7d 0d 09 09 7d 0d |break;..|..}...}.| |000013c0| 09 09 78 2b 2b 3b 0d 09 | 7d 0d 09 70 2d 3e 70 61 |..x++;..|}..p->pa| |000013d0| 72 74 4e 75 6d 20 3d 20 | 70 61 72 74 4e 75 6d 3b |rtNum = |partNum;| |000013e0| 0d 09 70 2d 3e 6e 75 6d | 50 61 72 74 73 20 3d 20 |..p->num|Parts = | |000013f0| 6e 75 6d 50 61 72 74 73 | 3b 0d 09 70 2d 3e 70 6f |numParts|;..p->po| |00001400| 74 65 6e 74 69 61 6c 50 | 61 72 74 20 3d 20 70 6f |tentialP|art = po| |00001410| 74 65 6e 74 69 61 6c 50 | 61 72 74 3b 0d 09 79 20 |tentialP|art;..y | |00001420| 3d 20 70 2d 3e 63 61 6e | 6f 6e 3b 0d 09 77 68 69 |= p->can|on;..whi| |00001430| 6c 65 20 28 2a 79 20 3e | 3d 20 30 20 26 26 20 21 |le (*y >|= 0 && !| |00001440| 69 73 61 6c 6e 75 6d 28 | 2a 79 29 29 20 79 2b 2b |isalnum(|*y)) y++| |00001450| 3b 0d 09 69 66 20 28 78 | 20 3d 3d 20 79 29 20 7b |;..if (x| == y) {| |00001460| 0d 09 09 42 6c 6f 63 6b | 4d 6f 76 65 44 61 74 61 |...Block|MoveData| |00001470| 28 65 6e 64 2c 20 78 2c | 20 73 74 72 6c 65 6e 28 |(end, x,| strlen(| |00001480| 65 6e 64 29 2b 31 29 3b | 0d 09 7d 20 65 6c 73 65 |end)+1);|..} else| |00001490| 20 7b 0d 09 09 2a 78 20 | 3d 20 30 3b 0d 09 7d 0d | {...*x |= 0;..}.| |000014a0| 09 78 20 3d 20 70 2d 3e | 63 61 6e 6f 6e 3b 0d 09 |.x = p->|canon;..| |000014b0| 69 66 20 28 2a 78 20 3d | 3d 20 27 76 27 29 20 7b |if (*x =|= 'v') {| |000014c0| 0d 09 09 78 2b 2b 3b 0d | 09 09 69 66 20 28 69 73 |...x++;.|..if (is| |000014d0| 64 69 67 69 74 28 2a 78 | 29 29 20 7b 0d 09 09 09 |digit(*x|)) {....| |000014e0| 78 2b 2b 3b 0d 09 09 09 | 77 68 69 6c 65 20 28 69 |x++;....|while (i| |000014f0| 73 64 69 67 69 74 28 2a | 78 29 29 20 78 2b 2b 3b |sdigit(*|x)) x++;| |00001500| 0d 09 09 09 69 66 20 28 | 2a 78 20 3d 3d 20 27 69 |....if (|*x == 'i| |00001510| 27 29 20 7b 0d 09 09 09 | 09 78 2b 2b 3b 0d 09 09 |') {....|.x++;...| |00001520| 09 09 69 66 20 28 69 73 | 64 69 67 69 74 28 2a 78 |..if (is|digit(*x| |00001530| 29 29 20 7b 0d 09 09 09 | 09 09 78 2b 2b 3b 0d 09 |)) {....|..x++;..| |00001540| 09 09 09 09 77 68 69 6c | 65 20 28 69 73 64 69 67 |....whil|e (isdig| |00001550| 69 74 28 2a 78 29 29 20 | 78 2b 2b 3b 0d 09 09 09 |it(*x)) |x++;....| |00001560| 09 09 69 66 20 28 2a 78 | 20 3d 3d 20 27 3a 27 29 |..if (*x| == ':')| |00001570| 20 7b 0d 09 09 09 09 09 | 09 78 2b 2b 3b 0d 09 09 | {......|.x++;...| |00001580| 09 09 09 09 77 68 69 6c | 65 20 28 69 73 4c 57 53 |....whil|e (isLWS| |00001590| 50 28 2a 78 29 29 20 78 | 2b 2b 3b 0d 09 09 09 09 |P(*x)) x|++;.....| |000015a0| 09 09 42 6c 6f 63 6b 4d | 6f 76 65 44 61 74 61 28 |..BlockM|oveData(| |000015b0| 78 2c 20 70 2d 3e 63 61 | 6e 6f 6e 2c 20 73 74 72 |x, p->ca|non, str| |000015c0| 6c 65 6e 28 78 29 2b 31 | 29 3b 0d 09 09 09 09 09 |len(x)+1|);......| |000015d0| 7d 0d 09 09 09 09 7d 0d | 09 09 09 7d 0d 09 09 7d |}.....}.|...}...}| |000015e0| 0d 09 7d 0d 09 78 20 3d | 20 70 2d 3e 63 61 6e 6f |..}..x =| p->cano| |000015f0| 6e 3b 0d 09 77 68 69 6c | 65 20 28 2a 78 20 21 3d |n;..whil|e (*x !=| |00001600| 20 30 29 20 78 2b 2b 3b | 0d 09 73 70 72 69 6e 74 | 0) x++;|..sprint| |00001610| 66 28 78 2c 20 22 25 64 | 22 2c 20 6e 75 6d 50 61 |f(x, "%d|", numPa| |00001620| 72 74 73 29 3b 0d 7d 0d | 0d 0d 0d 2f 2a 2d 2d 2d |rts);.}.|.../*---| |00001630| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001640| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001650| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001660| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001670| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 0d 09 49 6e 69 74 53 |--------|-..InitS| |00001680| 6f 72 74 49 6e 66 6f 20 | 0d 09 0d 09 49 6e 69 74 |ortInfo |....Init| |00001690| 69 61 6c 69 7a 65 20 73 | 6f 72 74 69 6e 67 20 69 |ialize s|orting i| |000016a0| 6e 66 6f 20 64 61 74 61 | 20 73 74 72 75 63 74 75 |nfo data| structu| |000016b0| 72 65 73 2e 0d 09 0d 09 | 45 6e 74 72 79 3a 09 73 |res.....|Entry:.s| |000016c0| 75 62 6a 65 63 74 41 72 | 72 61 79 20 3d 20 68 61 |ubjectAr|ray = ha| |000016d0| 6e 64 6c 65 20 74 6f 20 | 73 75 62 6a 65 63 74 20 |ndle to |subject | |000016e0| 61 72 72 61 79 2e 0d 09 | 09 09 6e 75 6d 53 75 62 |array...|..numSub| |000016f0| 6a 65 63 74 73 20 3d 20 | 6e 75 6d 62 65 72 20 6f |jects = |number o| |00001700| 66 20 73 75 62 6a 65 63 | 74 73 2e 0d 09 09 09 73 |f subjec|ts.....s| |00001710| 74 72 69 6e 67 73 20 3d | 20 68 61 6e 64 6c 65 20 |trings =| handle | |00001720| 74 6f 20 73 75 62 6a 65 | 63 74 20 73 74 72 69 6e |to subje|ct strin| |00001730| 67 73 2e 0d 09 09 09 0d | 09 45 78 69 74 3a 09 66 |gs......|.Exit:.f| |00001740| 75 6e 63 74 69 6f 6e 20 | 72 65 73 75 6c 74 20 3d |unction |result =| |00001750| 20 65 72 72 6f 72 20 63 | 6f 64 65 2e 0d 09 09 09 | error c|ode.....| |00001760| 2a 73 6f 72 74 49 6e 66 | 6f 20 3d 20 68 61 6e 64 |*sortInf|o = hand| |00001770| 6c 65 20 74 6f 20 6c 6f | 63 6b 65 64 20 73 6f 72 |le to lo|cked sor| |00001780| 74 20 69 6e 66 6f 20 61 | 72 72 61 79 2e 0d 09 09 |t info a|rray....| |00001790| 09 2a 63 61 6e 6f 6e 69 | 63 61 6c 53 74 72 69 6e |.*canoni|calStrin| |000017a0| 67 73 20 3d 20 68 61 6e | 64 6c 65 20 74 6f 20 6c |gs = han|dle to l| |000017b0| 6f 63 6b 65 64 20 63 61 | 6e 6f 6e 69 63 61 6c 20 |ocked ca|nonical | |000017c0| 73 75 62 6a 65 63 74 20 | 73 74 72 69 6e 67 73 2e |subject |strings.| |000017d0| 0d 09 09 09 2a 73 6f 72 | 74 49 6e 66 6f 50 74 72 |....*sor|tInfoPtr| |000017e0| 73 20 3d 20 68 61 6e 64 | 6c 65 20 74 6f 20 6c 6f |s = hand|le to lo| |000017f0| 63 6b 65 64 20 61 72 72 | 61 79 20 6f 66 20 70 6f |cked arr|ay of po| |00001800| 69 6e 74 65 72 73 20 69 | 6e 74 6f 20 74 68 65 20 |inters i|nto the | |00001810| 0d 09 09 09 09 73 6f 72 | 74 20 69 6e 66 6f 20 61 |.....sor|t info a| |00001820| 72 72 61 79 2e 0d 09 09 | 09 73 75 62 6a 65 63 74 |rray....|.subject| |00001830| 20 61 72 72 61 79 20 6c | 6f 63 6b 65 64 2e 0d 2d | array l|ocked..-| |00001840| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001850| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001860| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001870| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001880| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2a 2f 0d 0d 73 |--------|---*/..s| |00001890| 74 61 74 69 63 20 4f 53 | 45 72 72 20 49 6e 69 74 |tatic OS|Err Init| |000018a0| 53 6f 72 74 49 6e 66 6f | 20 28 54 53 75 62 6a 65 |SortInfo| (TSubje| |000018b0| 63 74 20 2a 2a 73 75 62 | 6a 65 63 74 41 72 72 61 |ct **sub|jectArra| |000018c0| 79 2c 20 73 68 6f 72 74 | 20 6e 75 6d 53 75 62 6a |y, short| numSubj| |000018d0| 65 63 74 73 2c 20 48 61 | 6e 64 6c 65 20 73 74 72 |ects, Ha|ndle str| |000018e0| 69 6e 67 73 2c 0d 09 54 | 53 6f 72 74 49 6e 66 6f |ings,..T|SortInfo| |000018f0| 48 61 6e 64 6c 65 20 2a | 73 6f 72 74 49 6e 66 6f |Handle *|sortInfo| |00001900| 2c 20 48 61 6e 64 6c 65 | 20 2a 63 61 6e 6f 6e 69 |, Handle| *canoni| |00001910| 63 61 6c 53 74 72 69 6e | 67 73 2c 20 54 53 6f 72 |calStrin|gs, TSor| |00001920| 74 49 6e 66 6f 50 74 72 | 20 2a 2a 2a 73 6f 72 74 |tInfoPtr| ***sort| |00001930| 49 6e 66 6f 50 74 72 73 | 29 0d 7b 0d 09 54 53 6f |InfoPtrs|).{..TSo| |00001940| 72 74 49 6e 66 6f 48 61 | 6e 64 6c 65 20 73 49 6e |rtInfoHa|ndle sIn| |00001950| 66 6f 20 3d 20 6e 69 6c | 3b 0d 09 48 61 6e 64 6c |fo = nil|;..Handl| |00001960| 65 20 63 53 74 72 69 6e | 67 73 20 3d 20 6e 69 6c |e cStrin|gs = nil| |00001970| 3b 0d 09 54 53 6f 72 74 | 49 6e 66 6f 50 74 72 20 |;..TSort|InfoPtr | |00001980| 2a 2a 73 49 6e 66 6f 50 | 74 72 73 20 3d 20 6e 69 |**sInfoP|trs = ni| |00001990| 6c 3b 0d 09 4f 53 45 72 | 72 20 65 72 72 20 3d 20 |l;..OSEr|r err = | |000019a0| 6e 6f 45 72 72 3b 0d 09 | 54 53 6f 72 74 49 6e 66 |noErr;..|TSortInf| |000019b0| 6f 50 74 72 20 70 3b 0d | 09 54 53 75 62 6a 65 63 |oPtr p;.|.TSubjec| |000019c0| 74 20 2a 71 3b 0d 09 54 | 53 6f 72 74 49 6e 66 6f |t *q;..T|SortInfo| |000019d0| 50 74 72 20 2a 72 3b 0d | 09 73 68 6f 72 74 20 69 |Ptr *r;.|.short i| |000019e0| 3b 0d 09 63 68 61 72 20 | 2a 63 61 6e 6f 6e 2c 20 |;..char |*canon, | |000019f0| 2a 78 3b 0d 09 6c 6f 6e | 67 20 6c 65 6e 2c 20 72 |*x;..lon|g len, r| |00001a00| 65 4c 65 6e 3b 0d 09 0d | 09 2f 2a 20 41 6c 6c 6f |eLen;...|./* Allo| |00001a10| 63 61 74 65 20 6d 65 6d | 6f 72 79 2e 20 2a 2f 0d |cate mem|ory. */.| |00001a20| 09 0d 09 65 72 72 20 3d | 20 4d 79 4e 65 77 48 61 |...err =| MyNewHa| |00001a30| 6e 64 6c 65 28 6e 75 6d | 53 75 62 6a 65 63 74 73 |ndle(num|Subjects| |00001a40| 20 2a 20 73 69 7a 65 6f | 66 28 54 53 6f 72 74 49 | * sizeo|f(TSortI| |00001a50| 6e 66 6f 29 2c 20 26 73 | 49 6e 66 6f 29 3b 0d 09 |nfo), &s|Info);..| |00001a60| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr| |00001a70| 29 20 67 6f 74 6f 20 65 | 78 69 74 3b 0d 09 65 72 |) goto e|xit;..er| |00001a80| 72 20 3d 20 4d 79 4e 65 | 77 48 61 6e 64 6c 65 28 |r = MyNe|wHandle(| |00001a90| 4d 79 47 65 74 48 61 6e | 64 6c 65 53 69 7a 65 28 |MyGetHan|dleSize(| |00001aa0| 73 74 72 69 6e 67 73 29 | 2c 20 26 63 53 74 72 69 |strings)|, &cStri| |00001ab0| 6e 67 73 29 3b 0d 09 69 | 66 20 28 65 72 72 20 21 |ngs);..i|f (err !| |00001ac0| 3d 20 6e 6f 45 72 72 29 | 20 67 6f 74 6f 20 65 78 |= noErr)| goto ex| |00001ad0| 69 74 3b 0d 09 65 72 72 | 20 3d 20 4d 79 4e 65 77 |it;..err| = MyNew| |00001ae0| 48 61 6e 64 6c 65 28 6e | 75 6d 53 75 62 6a 65 63 |Handle(n|umSubjec| |00001af0| 74 73 20 2a 20 73 69 7a | 65 6f 66 28 54 53 6f 72 |ts * siz|eof(TSor| |00001b00| 74 49 6e 66 6f 50 74 72 | 29 2c 20 26 73 49 6e 66 |tInfoPtr|), &sInf| |00001b10| 6f 50 74 72 73 29 3b 0d | 09 69 66 20 28 65 72 72 |oPtrs);.|.if (err| |00001b20| 20 21 3d 20 6e 6f 45 72 | 72 29 20 67 6f 74 6f 20 | != noEr|r) goto | |00001b30| 65 78 69 74 3b 0d 09 0d | 09 2f 2a 20 4c 6f 63 6b |exit;...|./* Lock| |00001b40| 20 65 76 65 72 79 74 68 | 69 6e 67 2e 20 2a 2f 0d | everyth|ing. */.| |00001b50| 09 0d 09 4d 79 48 4c 6f | 63 6b 28 73 49 6e 66 6f |...MyHLo|ck(sInfo| |00001b60| 29 3b 0d 09 4d 79 48 4c | 6f 63 6b 28 63 53 74 72 |);..MyHL|ock(cStr| |00001b70| 69 6e 67 73 29 3b 0d 09 | 4d 79 48 4c 6f 63 6b 28 |ings);..|MyHLock(| |00001b80| 73 49 6e 66 6f 50 74 72 | 73 29 3b 0d 09 4d 79 48 |sInfoPtr|s);..MyH| |00001b90| 4c 6f 63 6b 28 73 75 62 | 6a 65 63 74 41 72 72 61 |Lock(sub|jectArra| |00001ba0| 79 29 3b 0d 09 0d 09 66 | 6f 72 20 28 69 20 3d 20 |y);....f|or (i = | |00001bb0| 30 2c 20 70 20 3d 20 2a | 73 49 6e 66 6f 2c 20 71 |0, p = *|sInfo, q| |00001bc0| 20 3d 20 2a 73 75 62 6a | 65 63 74 41 72 72 61 79 | = *subj|ectArray| |00001bd0| 2c 20 72 20 3d 20 2a 73 | 49 6e 66 6f 50 74 72 73 |, r = *s|InfoPtrs| |00001be0| 2c 20 63 61 6e 6f 6e 20 | 3d 20 2a 63 53 74 72 69 |, canon |= *cStri| |00001bf0| 6e 67 73 3b 0d 09 09 69 | 20 3c 20 6e 75 6d 53 75 |ngs;...i| < numSu| |00001c00| 62 6a 65 63 74 73 3b 0d | 09 09 69 2b 2b 2c 20 70 |bjects;.|..i++, p| |00001c10| 2b 2b 2c 20 71 2b 2b 2c | 20 72 2b 2b 29 0d 09 7b |++, q++,| r++)..{| |00001c20| 0d 09 09 70 2d 3e 63 61 | 6e 6f 6e 20 3d 20 63 61 |...p->ca|non = ca| |00001c30| 6e 6f 6e 3b 0d 09 09 70 | 2d 3e 73 75 62 6a 65 63 |non;...p|->subjec| |00001c40| 74 20 3d 20 71 3b 0d 09 | 09 70 2d 3e 69 6e 64 65 |t = q;..|.p->inde| |00001c50| 78 20 3d 20 69 3b 0d 09 | 09 70 2d 3e 6e 75 6d 62 |x = i;..|.p->numb| |00001c60| 65 72 20 3d 20 71 2d 3e | 6e 75 6d 62 65 72 3b 0d |er = q->|number;.| |00001c70| 09 09 70 2d 3e 70 61 72 | 74 4e 75 6d 20 3d 20 70 |..p->par|tNum = p| |00001c80| 2d 3e 6e 75 6d 50 61 72 | 74 73 20 3d 20 30 78 37 |->numPar|ts = 0x7| |00001c90| 66 66 66 3b 0d 09 09 70 | 2d 3e 66 72 6f 6d 43 61 |fff;...p|->fromCa| |00001ca0| 63 68 65 20 3d 20 71 2d | 3e 72 65 61 64 3b 0d 09 |che = q-|>read;..| |00001cb0| 09 70 2d 3e 70 6f 74 65 | 6e 74 69 61 6c 50 61 72 |.p->pote|ntialPar| |00001cc0| 74 20 3d 20 66 61 6c 73 | 65 3b 0d 09 09 2a 72 20 |t = fals|e;...*r | |00001cd0| 3d 20 70 3b 0d 09 09 78 | 20 3d 20 2a 73 74 72 69 |= p;...x| = *stri| |00001ce0| 6e 67 73 20 2b 20 71 2d | 3e 73 75 62 6a 65 63 74 |ngs + q-|>subject| |00001cf0| 4f 66 66 73 65 74 3b 0d | 09 09 6c 65 6e 20 3d 20 |Offset;.|..len = | |00001d00| 73 74 72 6c 65 6e 28 78 | 29 3b 0d 09 09 72 65 4c |strlen(x|);...reL| |00001d10| 65 6e 20 3d 20 50 61 72 | 73 65 52 65 28 78 2c 20 |en = Par|seRe(x, | |00001d20| 6c 65 6e 29 3b 0d 09 09 | 78 20 2b 3d 20 72 65 4c |len);...|x += reL| |00001d30| 65 6e 3b 0d 09 09 77 68 | 69 6c 65 20 28 2a 78 20 |en;...wh|ile (*x | |00001d40| 21 3d 20 30 29 20 7b 0d | 09 09 09 69 66 20 28 69 |!= 0) {.|...if (i| |00001d50| 73 61 6c 6e 75 6d 28 2a | 78 29 20 7c 7c 20 2a 78 |salnum(*|x) || *x| |00001d60| 20 3c 20 30 29 20 7b 0d | 09 09 09 09 2a 63 61 6e | < 0) {.|....*can| |00001d70| 6f 6e 2b 2b 20 3d 20 74 | 6f 6c 6f 77 65 72 28 2a |on++ = t|olower(*| |00001d80| 78 2b 2b 29 3b 0d 09 09 | 09 7d 20 65 6c 73 65 20 |x++);...|.} else | |00001d90| 69 66 20 28 2a 78 20 3d | 3d 20 27 5b 27 20 7c 7c |if (*x =|= '[' ||| |00001da0| 20 2a 78 20 3d 3d 20 27 | 5d 27 20 7c 7c 20 2a 78 | *x == '|]' || *x| |00001db0| 20 3d 3d 20 27 28 27 20 | 7c 7c 20 2a 78 20 3d 3d | == '(' ||| *x ==| |00001dc0| 20 27 29 27 20 7c 7c 0d | 09 09 09 09 2a 78 20 3d | ')' ||.|....*x =| |00001dd0| 3d 20 27 2f 27 20 7c 7c | 20 2a 78 20 3d 3d 20 27 |= '/' ||| *x == '| |00001de0| 7c 27 20 7c 7c 20 2a 78 | 20 3d 3d 20 27 3a 27 29 ||' || *x| == ':')| |00001df0| 20 7b 0d 09 09 09 09 2a | 63 61 6e 6f 6e 2b 2b 20 | {.....*|canon++ | |00001e00| 3d 20 2a 78 2b 2b 3b 0d | 09 09 09 7d 20 65 6c 73 |= *x++;.|...} els| |00001e10| 65 20 7b 0d 09 09 09 09 | 78 2b 2b 3b 0d 09 09 09 |e {.....|x++;....| |00001e20| 7d 0d 09 09 7d 0d 09 09 | 2a 63 61 6e 6f 6e 2b 2b |}...}...|*canon++| |00001e30| 20 3d 20 30 3b 0d 09 09 | 43 68 65 63 6b 46 6f 72 | = 0;...|CheckFor| |00001e40| 50 61 72 74 49 6e 64 69 | 63 61 74 6f 72 28 70 29 |PartIndi|cator(p)| |00001e50| 3b 0d 09 09 69 66 20 28 | 72 65 4c 65 6e 20 3e 20 |;...if (|reLen > | |00001e60| 30 29 20 7b 0d 09 09 09 | 70 2d 3e 70 61 72 74 4e |0) {....|p->partN| |00001e70| 75 6d 20 3d 20 70 2d 3e | 6e 75 6d 50 61 72 74 73 |um = p->|numParts| |00001e80| 20 3d 20 30 78 37 66 66 | 66 3b 0d 09 09 09 70 2d | = 0x7ff|f;....p-| |00001e90| 3e 70 6f 74 65 6e 74 69 | 61 6c 50 61 72 74 20 3d |>potenti|alPart =| |00001ea0| 20 66 61 6c 73 65 3b 0d | 09 09 7d 0d 09 7d 0d 09 | false;.|..}..}..| |00001eb0| 0d 09 2a 73 6f 72 74 49 | 6e 66 6f 20 3d 20 73 49 |..*sortI|nfo = sI| |00001ec0| 6e 66 6f 3b 0d 09 2a 63 | 61 6e 6f 6e 69 63 61 6c |nfo;..*c|anonical| |00001ed0| 53 74 72 69 6e 67 73 20 | 3d 20 63 53 74 72 69 6e |Strings |= cStrin| |00001ee0| 67 73 3b 0d 09 2a 73 6f | 72 74 49 6e 66 6f 50 74 |gs;..*so|rtInfoPt| |00001ef0| 72 73 20 3d 20 73 49 6e | 66 6f 50 74 72 73 3b 0d |rs = sIn|foPtrs;.| |00001f00| 09 72 65 74 75 72 6e 20 | 6e 6f 45 72 72 3b 0d 09 |.return |noErr;..| |00001f10| 0d 65 78 69 74 3a 0d 0d | 09 4d 79 44 69 73 70 6f |.exit:..|.MyDispo| |00001f20| 73 65 48 61 6e 64 6c 65 | 28 73 49 6e 66 6f 29 3b |seHandle|(sInfo);| |00001f30| 0d 09 4d 79 44 69 73 70 | 6f 73 65 48 61 6e 64 6c |..MyDisp|oseHandl| |00001f40| 65 28 63 53 74 72 69 6e | 67 73 29 3b 0d 09 4d 79 |e(cStrin|gs);..My| |00001f50| 44 69 73 70 6f 73 65 48 | 61 6e 64 6c 65 28 73 49 |DisposeH|andle(sI| |00001f60| 6e 66 6f 50 74 72 73 29 | 3b 0d 09 72 65 74 75 72 |nfoPtrs)|;..retur| |00001f70| 6e 20 65 72 72 3b 0d 7d | 0d 0d 0d 0d 2f 2a 2d 2d |n err;.}|..../*--| |00001f80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001f90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001fa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001fb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00001fc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 09 53 6f 72 74 |--------|--..Sort| |00001fd0| 53 75 62 6a 65 63 74 41 | 72 72 61 79 43 6f 6d 70 |SubjectA|rrayComp| |00001fe0| 61 72 65 31 20 0d 09 0d | 09 54 68 69 73 20 69 73 |are1 ...|.This is| |00001ff0| 20 74 68 65 20 63 6f 6d | 70 61 72 69 73 6f 6e 20 | the com|parison | |00002000| 66 75 6e 63 74 69 6f 6e | 20 75 73 65 64 20 74 6f |function| used to| |00002010| 20 73 6f 72 74 20 74 68 | 65 20 61 72 72 61 79 20 | sort th|e array | |00002020| 6f 66 20 70 6f 69 6e 74 | 65 72 73 20 74 6f 20 0d |of point|ers to .| |00002030| 09 54 53 6f 72 74 49 6e | 66 6f 20 72 65 63 6f 72 |.TSortIn|fo recor| |00002040| 64 73 20 69 6e 74 6f 20 | 69 6e 63 72 65 61 73 69 |ds into |increasi| |00002050| 6e 67 20 6f 72 64 65 72 | 20 62 79 20 63 61 6e 6f |ng order| by cano| |00002060| 6e 69 63 61 6c 20 73 75 | 62 6a 65 63 74 2e 0d 09 |nical su|bject...| |00002070| 0d 09 45 6e 74 72 79 3a | 09 70 20 3d 20 70 6f 69 |..Entry:|.p = poi| |00002080| 6e 74 65 72 20 74 6f 20 | 70 6f 69 6e 74 65 72 20 |nter to |pointer | |00002090| 74 6f 20 54 53 6f 72 74 | 49 6e 66 6f 20 72 65 63 |to TSort|Info rec| |000020a0| 6f 72 64 2e 0d 09 09 09 | 71 20 3d 20 70 6f 69 6e |ord.....|q = poin| |000020b0| 74 65 72 20 74 6f 20 70 | 6f 69 6e 74 65 72 20 74 |ter to p|ointer t| |000020c0| 6f 20 54 53 6f 72 74 49 | 6e 66 6f 20 72 65 63 6f |o TSortI|nfo reco| |000020d0| 72 64 2e 0d 09 09 09 0d | 09 45 78 69 74 3a 09 66 |rd......|.Exit:.f| |000020e0| 75 6e 63 74 69 6f 6e 20 | 72 65 73 75 6c 74 20 3d |unction |result =| |000020f0| 20 65 72 72 6f 72 20 63 | 6f 64 65 2e 0d 09 09 09 | error c|ode.....| |00002100| 2a 72 65 73 75 6c 74 0d | 09 09 09 09 3c 20 30 20 |*result.|....< 0 | |00002110| 69 66 20 66 69 72 73 74 | 20 73 75 62 6a 65 63 74 |if first| subject| |00002120| 20 3c 20 73 65 63 6f 6e | 64 20 73 75 62 6a 65 63 | < secon|d subjec| |00002130| 74 2e 0d 09 09 09 09 3d | 20 30 20 69 66 20 66 69 |t......=| 0 if fi| |00002140| 72 73 74 20 73 75 62 6a | 65 63 74 20 3d 3d 20 73 |rst subj|ect == s| |00002150| 65 63 6f 6e 64 20 73 75 | 62 6a 65 63 74 2e 0d 09 |econd su|bject...| |00002160| 09 09 09 3e 20 30 20 69 | 66 20 66 69 72 73 74 20 |...> 0 i|f first | |00002170| 73 75 62 6a 65 63 74 20 | 3e 20 73 65 63 6f 6e 64 |subject |> second| |00002180| 20 73 75 62 6a 65 63 74 | 2e 0d 09 09 09 09 0d 09 | subject|........| |00002190| 54 68 65 20 70 72 69 6d | 61 72 79 20 73 6f 72 74 |The prim|ary sort| |000021a0| 20 6b 65 79 20 69 73 20 | 74 68 65 20 63 61 6e 6f | key is |the cano| |000021b0| 6e 69 63 61 6c 20 73 75 | 62 6a 65 63 74 2e 0d 09 |nical su|bject...| |000021c0| 0d 09 54 68 65 20 73 65 | 63 6f 6e 64 61 72 79 20 |..The se|condary | |000021d0| 73 6f 72 74 20 6b 65 79 | 20 69 73 20 74 68 65 20 |sort key| is the | |000021e0| 70 61 72 74 20 6e 75 6d | 62 65 72 2e 0d 09 0d 09 |part num|ber.....| |000021f0| 54 68 65 20 74 65 72 74 | 69 61 72 79 20 73 6f 72 |The tert|iary sor| |00002200| 74 20 6b 65 79 20 69 73 | 20 74 68 65 20 61 72 74 |t key is| the art| |00002210| 69 63 6c 65 20 6e 75 6d | 62 65 72 2e 0d 2d 2d 2d |icle num|ber..---| |00002220| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002230| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002240| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002250| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002260| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 73 74 61 |--------|-*/..sta| |00002270| 74 69 63 20 4f 53 45 72 | 72 20 53 6f 72 74 53 75 |tic OSEr|r SortSu| |00002280| 62 6a 65 63 74 41 72 72 | 61 79 43 6f 6d 70 61 72 |bjectArr|ayCompar| |00002290| 65 31 20 28 54 53 6f 72 | 74 49 6e 66 6f 20 2a 2a |e1 (TSor|tInfo **| |000022a0| 70 2c 20 54 53 6f 72 74 | 49 6e 66 6f 20 2a 2a 71 |p, TSort|Info **q| |000022b0| 2c 20 73 68 6f 72 74 20 | 2a 72 65 73 75 6c 74 29 |, short |*result)| |000022c0| 0d 7b 0d 09 4f 53 45 72 | 72 20 65 72 72 3b 0d 09 |.{..OSEr|r err;..| |000022d0| 73 74 61 74 69 63 20 73 | 68 6f 72 74 20 63 6f 75 |static s|hort cou| |000022e0| 6e 74 65 72 20 3d 20 30 | 3b 0d 09 73 68 6f 72 74 |nter = 0|;..short| |000022f0| 20 72 3b 0d 0d 09 69 66 | 20 28 28 2b 2b 63 6f 75 | r;...if| ((++cou| |00002300| 6e 74 65 72 20 26 20 30 | 78 31 66 29 20 3d 3d 20 |nter & 0|x1f) == | |00002310| 30 29 20 7b 0d 09 09 65 | 72 72 20 3d 20 47 69 76 |0) {...e|rr = Giv| |00002320| 65 54 69 6d 65 28 66 61 | 6c 73 65 29 3b 0d 09 09 |eTime(fa|lse);...| |00002330| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr| |00002340| 29 20 72 65 74 75 72 6e | 20 65 72 72 3b 0d 09 09 |) return| err;...| |00002350| 63 6f 75 6e 74 65 72 20 | 3d 20 30 3b 0d 09 7d 0d |counter |= 0;..}.| |00002360| 09 0d 09 72 20 3d 20 73 | 74 72 63 6d 70 28 28 2a |...r = s|trcmp((*| |00002370| 2a 70 29 2e 63 61 6e 6f | 6e 2c 20 28 2a 2a 71 29 |*p).cano|n, (**q)| |00002380| 2e 63 61 6e 6f 6e 29 3b | 0d 09 69 66 20 28 72 20 |.canon);|..if (r | |00002390| 21 3d 20 30 20 29 20 7b | 0d 09 09 2a 72 65 73 75 |!= 0 ) {|...*resu| |000023a0| 6c 74 20 3d 20 72 3b 0d | 09 7d 20 65 6c 73 65 20 |lt = r;.|.} else | |000023b0| 7b 0d 09 09 72 20 3d 20 | 28 2a 2a 70 29 2e 70 61 |{...r = |(**p).pa| |000023c0| 72 74 4e 75 6d 20 2d 20 | 28 2a 2a 71 29 2e 70 61 |rtNum - |(**q).pa| |000023d0| 72 74 4e 75 6d 3b 0d 09 | 09 69 66 20 28 72 20 21 |rtNum;..|.if (r !| |000023e0| 3d 20 30 29 20 7b 0d 09 | 09 09 2a 72 65 73 75 6c |= 0) {..|..*resul| |000023f0| 74 20 3d 20 72 3b 0d 09 | 09 7d 20 65 6c 73 65 20 |t = r;..|.} else | |00002400| 7b 0d 09 09 09 2a 72 65 | 73 75 6c 74 20 3d 20 28 |{....*re|sult = (| |00002410| 2a 2a 70 29 2e 6e 75 6d | 62 65 72 20 3c 20 28 2a |**p).num|ber < (*| |00002420| 2a 71 29 2e 6e 75 6d 62 | 65 72 20 3f 20 2d 31 20 |*q).numb|er ? -1 | |00002430| 3a 20 2b 31 3b 0d 09 09 | 7d 0d 09 7d 0d 09 72 65 |: +1;...|}..}..re| |00002440| 74 75 72 6e 20 6e 6f 45 | 72 72 3b 0d 7d 0d 0d 0d |turn noE|rr;.}...| |00002450| 0d 2f 2a 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |./*-----|--------| |00002460| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002470| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002480| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002490| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 0d |--------|-------.| |000024a0| 09 53 6f 72 74 53 75 62 | 6a 65 63 74 41 72 72 61 |.SortSub|jectArra| |000024b0| 79 43 6f 6d 70 61 72 65 | 32 20 0d 09 0d 09 54 68 |yCompare|2 ....Th| |000024c0| 69 73 20 69 73 20 74 68 | 65 20 63 6f 6d 70 61 72 |is is th|e compar| |000024d0| 69 73 6f 6e 20 66 75 6e | 63 74 69 6f 6e 20 75 73 |ison fun|ction us| |000024e0| 65 64 20 74 6f 20 73 6f | 72 74 20 74 68 65 20 61 |ed to so|rt the a| |000024f0| 72 72 61 79 20 6f 66 20 | 70 6f 69 6e 74 65 72 73 |rray of |pointers| |00002500| 20 74 6f 20 0d 09 54 53 | 6f 72 74 49 6e 66 6f 20 | to ..TS|ortInfo | |00002510| 72 65 63 6f 72 64 73 20 | 69 6e 74 6f 20 66 69 6e |records |into fin| |00002520| 61 6c 20 74 68 72 65 61 | 64 20 6f 72 64 65 72 2e |al threa|d order.| |00002530| 0d 09 0d 09 45 6e 74 72 | 79 3a 09 70 20 3d 20 70 |....Entr|y:.p = p| |00002540| 6f 69 6e 74 65 72 20 74 | 6f 20 70 6f 69 6e 74 65 |ointer t|o pointe| |00002550| 72 20 74 6f 20 54 53 6f | 72 74 49 6e 66 6f 20 72 |r to TSo|rtInfo r| |00002560| 65 63 6f 72 64 2e 0d 09 | 09 09 71 20 3d 20 70 6f |ecord...|..q = po| |00002570| 69 6e 74 65 72 20 74 6f | 20 70 6f 69 6e 74 65 72 |inter to| pointer| |00002580| 20 74 6f 20 54 53 6f 72 | 74 49 6e 66 6f 20 72 65 | to TSor|tInfo re| |00002590| 63 6f 72 64 2e 0d 09 09 | 09 0d 09 45 78 69 74 3a |cord....|...Exit:| |000025a0| 09 66 75 6e 63 74 69 6f | 6e 20 72 65 73 75 6c 74 |.functio|n result| |000025b0| 20 3d 20 65 72 72 6f 72 | 20 63 6f 64 65 2e 0d 09 | = error| code...| |000025c0| 09 09 2a 72 65 73 75 6c | 74 0d 09 09 09 09 3c 20 |..*resul|t.....< | |000025d0| 30 20 69 66 20 66 69 72 | 73 74 20 73 75 62 6a 65 |0 if fir|st subje| |000025e0| 63 74 20 3c 20 73 65 63 | 6f 6e 64 20 73 75 62 6a |ct < sec|ond subj| |000025f0| 65 63 74 2e 0d 09 09 09 | 09 3d 20 30 20 69 66 20 |ect.....|.= 0 if | |00002600| 66 69 72 73 74 20 73 75 | 62 6a 65 63 74 20 3d 3d |first su|bject ==| |00002610| 20 73 65 63 6f 6e 64 20 | 73 75 62 6a 65 63 74 2e | second |subject.| |00002620| 0d 09 09 09 09 3e 20 30 | 20 69 66 20 66 69 72 73 |.....> 0| if firs| |00002630| 74 20 73 75 62 6a 65 63 | 74 20 3e 20 73 65 63 6f |t subjec|t > seco| |00002640| 6e 64 20 73 75 62 6a 65 | 63 74 2e 0d 09 09 09 09 |nd subje|ct......| |00002650| 0d 09 54 68 65 20 70 72 | 69 6d 61 72 79 20 73 6f |..The pr|imary so| |00002660| 72 74 20 6b 65 79 20 69 | 73 20 74 68 65 20 74 68 |rt key i|s the th| |00002670| 72 65 61 64 20 68 65 61 | 64 20 61 72 74 69 63 6c |read hea|d articl| |00002680| 65 20 6e 75 6d 62 65 72 | 2e 0d 09 0d 09 54 68 65 |e number|.....The| |00002690| 20 73 65 63 6f 6e 64 61 | 72 79 20 73 6f 72 74 20 | seconda|ry sort | |000026a0| 6b 65 79 20 69 73 20 74 | 68 65 20 74 68 72 65 61 |key is t|he threa| |000026b0| 64 20 6f 72 64 69 6e 61 | 6c 2e 0d 2d 2d 2d 2d 2d |d ordina|l..-----| |000026c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000026d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000026e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000026f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002700| 2d 2d 2d 2d 2d 2d 2d 2a | 2f 0d 0d 73 74 61 74 69 |-------*|/..stati| |00002710| 63 20 4f 53 45 72 72 20 | 53 6f 72 74 53 75 62 6a |c OSErr |SortSubj| |00002720| 65 63 74 41 72 72 61 79 | 43 6f 6d 70 61 72 65 32 |ectArray|Compare2| |00002730| 20 28 54 53 6f 72 74 49 | 6e 66 6f 20 2a 2a 70 2c | (TSortI|nfo **p,| |00002740| 20 54 53 6f 72 74 49 6e | 66 6f 20 2a 2a 71 2c 20 | TSortIn|fo **q, | |00002750| 73 68 6f 72 74 20 2a 72 | 65 73 75 6c 74 29 0d 7b |short *r|esult).{| |00002760| 0d 09 4f 53 45 72 72 20 | 65 72 72 3b 0d 09 73 74 |..OSErr |err;..st| |00002770| 61 74 69 63 20 73 68 6f | 72 74 20 63 6f 75 6e 74 |atic sho|rt count| |00002780| 65 72 20 3d 20 30 3b 0d | 0d 09 69 66 20 28 28 2b |er = 0;.|..if ((+| |00002790| 2b 63 6f 75 6e 74 65 72 | 20 26 20 30 78 31 66 29 |+counter| & 0x1f)| |000027a0| 20 3d 3d 20 30 29 20 7b | 0d 09 09 65 72 72 20 3d | == 0) {|...err =| |000027b0| 20 47 69 76 65 54 69 6d | 65 28 66 61 6c 73 65 29 | GiveTim|e(false)| |000027c0| 3b 0d 09 09 69 66 20 28 | 65 72 72 20 21 3d 20 6e |;...if (|err != n| |000027d0| 6f 45 72 72 29 20 72 65 | 74 75 72 6e 20 65 72 72 |oErr) re|turn err| |000027e0| 3b 0d 09 09 63 6f 75 6e | 74 65 72 20 3d 20 30 3b |;...coun|ter = 0;| |000027f0| 0d 09 7d 0d 09 0d 09 69 | 66 20 28 28 2a 2a 70 29 |..}....i|f ((**p)| |00002800| 2e 74 68 72 65 61 64 48 | 65 61 64 4e 75 6d 62 65 |.threadH|eadNumbe| |00002810| 72 20 3d 3d 20 28 2a 2a | 71 29 2e 74 68 72 65 61 |r == (**|q).threa| |00002820| 64 48 65 61 64 4e 75 6d | 62 65 72 29 20 7b 0d 09 |dHeadNum|ber) {..| |00002830| 09 2a 72 65 73 75 6c 74 | 20 3d 20 28 2a 2a 70 29 |.*result| = (**p)| |00002840| 2e 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 20 2d |.threadO|rdinal -| |00002850| 20 28 2a 2a 71 29 2e 74 | 68 72 65 61 64 4f 72 64 | (**q).t|hreadOrd| |00002860| 69 6e 61 6c 3b 0d 09 7d | 20 65 6c 73 65 20 7b 0d |inal;..}| else {.| |00002870| 09 09 2a 72 65 73 75 6c | 74 20 3d 20 28 2a 2a 70 |..*resul|t = (**p| |00002880| 29 2e 74 68 72 65 61 64 | 48 65 61 64 4e 75 6d 62 |).thread|HeadNumb| |00002890| 65 72 20 3c 20 28 2a 2a | 71 29 2e 74 68 72 65 61 |er < (**|q).threa| |000028a0| 64 48 65 61 64 4e 75 6d | 62 65 72 20 3f 20 2d 31 |dHeadNum|ber ? -1| |000028b0| 20 3a 20 2b 31 3b 0d 09 | 7d 0d 09 72 65 74 75 72 | : +1;..|}..retur| |000028c0| 6e 20 6e 6f 45 72 72 3b | 09 0d 7d 0d 0d 0d 0d 2f |n noErr;|..}..../| |000028d0| 2a 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |*-------|--------| |000028e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000028f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002900| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002910| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 0d 09 50 |--------|-----..P| |00002920| 72 6f 63 65 73 73 54 68 | 72 65 61 64 20 0d 09 0d |rocessTh|read ...| |00002930| 09 50 72 6f 63 65 73 73 | 20 61 20 74 68 72 65 61 |.Process| a threa| |00002940| 64 2e 0d 09 0d 09 45 6e | 74 72 79 3a 09 74 68 72 |d.....En|try:.thr| |00002950| 65 61 64 48 65 61 64 50 | 74 72 20 3d 20 70 6f 69 |eadHeadP|tr = poi| |00002960| 6e 74 65 72 20 74 6f 20 | 66 69 72 73 74 20 65 6c |nter to |first el| |00002970| 65 6d 65 6e 74 20 6f 66 | 20 54 53 6f 72 74 49 6e |ement of| TSortIn| |00002980| 66 6f 20 61 72 72 61 79 | 0d 09 09 09 09 66 6f 72 |fo array|.....for| |00002990| 20 74 68 72 65 61 64 2e | 0d 09 09 09 74 68 72 65 | thread.|....thre| |000029a0| 61 64 45 6e 64 50 74 72 | 20 3d 20 70 6f 69 6e 74 |adEndPtr| = point| |000029b0| 65 72 20 74 6f 20 65 6c | 65 6d 65 6e 74 20 66 6f |er to el|ement fo| |000029c0| 6c 6c 6f 77 69 6e 67 20 | 6c 61 73 74 20 65 6c 65 |llowing |last ele| |000029d0| 6d 65 6e 74 20 6f 66 0d | 09 09 09 09 54 53 6f 72 |ment of.|....TSor| |000029e0| 74 49 6e 66 6f 20 61 72 | 72 61 79 20 66 6f 72 20 |tInfo ar|ray for | |000029f0| 74 68 72 65 61 64 2e 0d | 09 09 09 0d 09 45 78 69 |thread..|.....Exi| |00002a00| 74 3a 09 66 75 6e 63 74 | 69 6f 6e 20 72 65 73 75 |t:.funct|ion resu| |00002a10| 6c 74 20 3d 20 65 72 72 | 6f 72 20 63 6f 64 65 2e |lt = err|or code.| |00002a20| 0d 09 09 09 0d 09 4f 6e | 20 65 6e 74 72 79 2c 20 |......On| entry, | |00002a30| 74 68 65 20 22 66 72 6f | 6d 43 61 63 68 65 22 20 |the "fro|mCache" | |00002a40| 66 69 65 6c 64 20 6f 66 | 20 65 61 63 68 20 54 53 |field of| each TS| |00002a50| 6f 72 74 49 6e 66 6f 20 | 72 65 63 6f 72 64 20 69 |ortInfo |record i| |00002a60| 73 20 74 72 75 65 20 69 | 66 20 74 68 65 20 0d 09 |s true i|f the ..| |00002a70| 61 72 74 69 63 6c 65 20 | 63 61 6d 65 20 66 72 6f |article |came fro| |00002a80| 6d 20 74 68 65 20 70 61 | 72 74 73 20 63 61 63 68 |m the pa|rts cach| |00002a90| 65 2c 20 66 61 6c 73 65 | 20 69 66 20 74 68 65 20 |e, false| if the | |00002aa0| 61 72 74 69 63 6c 65 20 | 77 61 73 20 72 65 61 64 |article |was read| |00002ab0| 0d 09 66 72 6f 6d 20 74 | 68 65 20 6e 65 74 2e 0d |..from t|he net..| |00002ac0| 09 0d 09 4f 6e 20 65 78 | 69 74 2c 20 74 68 65 20 |...On ex|it, the | |00002ad0| 66 6f 6c 6c 6f 77 69 6e | 67 20 66 69 65 6c 64 73 |followin|g fields| |00002ae0| 20 61 72 65 20 73 65 74 | 20 69 6e 20 65 61 63 68 | are set| in each| |00002af0| 20 54 53 75 62 6a 65 63 | 74 20 72 65 63 6f 72 64 | TSubjec|t record| |00002b00| 3a 0d 0d 09 09 74 68 72 | 65 61 64 48 65 61 64 49 |:....thr|eadHeadI| |00002b10| 6e 64 65 78 20 3d 20 69 | 6e 64 65 78 20 69 6e 20 |ndex = i|ndex in | |00002b20| 73 75 62 6a 65 63 74 20 | 61 72 72 61 79 20 6f 66 |subject |array of| |00002b30| 20 74 68 72 65 61 64 20 | 68 65 61 64 2e 0d 09 09 | thread |head....| |00002b40| 74 68 72 65 61 64 4f 72 | 64 69 6e 61 6c 20 3d 20 |threadOr|dinal = | |00002b50| 61 72 74 69 63 6c 65 20 | 6f 72 64 69 6e 61 6c 20 |article |ordinal | |00002b60| 77 69 74 68 69 6e 20 74 | 68 72 65 61 64 20 28 31 |within t|hread (1| |00002b70| 2c 32 2c 33 2c 2e 2e 2e | 29 2e 09 0d 09 09 74 68 |,2,3,...|).....th| |00002b80| 72 65 61 64 4c 65 6e 67 | 74 68 20 3d 20 6c 65 6e |readLeng|th = len| |00002b90| 67 74 68 20 6f 66 20 74 | 68 72 65 61 64 2e 0d 09 |gth of t|hread...| |00002ba0| 09 6e 65 78 74 49 6e 54 | 68 72 65 61 64 20 3d 20 |.nextInT|hread = | |00002bb0| 69 6e 64 65 78 20 69 6e | 20 73 75 62 6a 65 63 74 |index in| subject| |00002bc0| 20 61 72 72 61 79 20 6f | 66 20 6e 65 78 74 20 61 | array o|f next a| |00002bd0| 72 74 69 63 6c 65 20 69 | 6e 20 74 68 72 65 61 64 |rticle i|n thread| |00002be0| 2c 0d 09 09 09 6f 72 20 | 2d 31 20 69 66 20 6c 61 |,....or |-1 if la| |00002bf0| 73 74 20 61 72 74 69 63 | 6c 65 20 69 6e 20 74 68 |st artic|le in th| |00002c00| 72 65 61 64 2e 20 0d 09 | 09 70 61 72 74 4e 75 6d |read. ..|.partNum| |00002c10| 20 3d 20 70 61 72 74 20 | 6e 75 6d 62 65 72 2c 20 | = part |number, | |00002c20| 6f 72 20 30 78 37 66 66 | 66 20 69 66 20 6e 6f 74 |or 0x7ff|f if not| |00002c30| 20 61 20 70 61 72 74 2e | 0d 09 09 6e 75 6d 50 61 | a part.|...numPa| |00002c40| 72 74 73 20 3d 20 6e 75 | 6d 62 65 72 20 6f 66 20 |rts = nu|mber of | |00002c50| 70 61 72 74 73 2c 20 6f | 72 20 30 78 37 66 66 66 |parts, o|r 0x7fff| |00002c60| 20 69 66 20 6e 6f 74 20 | 61 20 70 61 72 74 2e 0d | if not |a part..| |00002c70| 09 09 72 65 61 64 20 3d | 20 66 61 6c 73 65 0d 09 |..read =| false..| |00002c80| 09 69 6e 63 6f 6d 70 6c | 65 74 65 20 3d 20 74 72 |.incompl|ete = tr| |00002c90| 75 65 20 69 66 20 61 72 | 74 69 63 6c 65 20 69 73 |ue if ar|ticle is| |00002ca0| 20 70 61 72 74 20 6f 66 | 20 61 6e 20 69 6e 63 6f | part of| an inco| |00002cb0| 6d 70 6c 65 74 65 20 6d | 75 6c 74 69 70 6c 65 0d |mplete m|ultiple.| |00002cc0| 09 09 09 70 61 72 74 20 | 74 68 72 65 61 64 2e 09 |...part |thread..| |00002cd0| 09 0d 09 09 69 6e 4c 69 | 73 74 20 3d 20 74 72 75 |....inLi|st = tru| |00002ce0| 65 20 69 66 20 61 72 74 | 69 63 6c 65 20 73 68 6f |e if art|icle sho| |00002cf0| 75 6c 64 20 62 65 20 69 | 6e 63 6c 75 64 65 64 20 |uld be i|ncluded | |00002d00| 69 6e 20 6c 69 73 74 20 | 64 69 73 70 6c 61 79 65 |in list |displaye| |00002d10| 64 0d 09 09 09 74 6f 20 | 75 73 65 72 20 28 74 68 |d....to |user (th| |00002d20| 72 65 61 64 20 63 6f 6e | 74 61 69 6e 73 20 61 74 |read con|tains at| |00002d30| 20 6c 65 61 73 74 20 6f | 6e 65 20 75 6e 72 65 61 | least o|ne unrea| |00002d40| 64 20 61 72 74 69 63 6c | 65 29 2e 0d 09 09 09 0d |d articl|e)......| |00002d50| 09 4f 6e 20 65 78 69 74 | 2c 20 74 68 65 20 66 6f |.On exit|, the fo| |00002d60| 6c 6c 6f 77 69 6e 67 20 | 66 69 65 6c 64 73 20 61 |llowing |fields a| |00002d70| 72 65 20 73 65 74 20 69 | 6e 20 65 61 63 68 20 54 |re set i|n each T| |00002d80| 53 6f 72 74 49 6e 66 6f | 20 72 65 63 6f 72 64 3a |SortInfo| record:| |00002d90| 0d 09 09 0d 09 09 74 68 | 72 65 61 64 48 65 61 64 |......th|readHead| |00002da0| 4e 75 6d 62 65 72 20 3d | 20 61 72 74 69 63 6c 65 |Number =| article| |00002db0| 20 6e 75 6d 62 65 72 20 | 6f 66 20 66 69 72 73 74 | number |of first| |00002dc0| 20 61 72 74 69 63 6c 65 | 20 69 6e 20 74 68 72 65 | article| in thre| |00002dd0| 61 64 2e 0d 09 09 74 68 | 72 65 61 64 4f 72 64 69 |ad....th|readOrdi| |00002de0| 6e 61 6c 20 3d 20 61 72 | 74 69 63 6c 65 20 6f 72 |nal = ar|ticle or| |00002df0| 64 69 6e 61 6c 20 77 69 | 74 68 69 6e 20 74 68 72 |dinal wi|thin thr| |00002e00| 65 61 64 20 28 31 2c 32 | 2c 33 2c 2e 2e 2e 29 2e |ead (1,2|,3,...).| |00002e10| 0d 09 09 0d 09 4f 6e 20 | 65 78 69 74 2c 20 74 68 |.....On |exit, th| |00002e20| 65 20 66 6f 6c 6c 6f 77 | 69 6e 67 20 66 69 65 6c |e follow|ing fiel| |00002e30| 64 73 20 69 6e 20 74 68 | 65 20 54 53 6f 72 74 49 |ds in th|e TSortI| |00002e40| 6e 66 6f 20 72 65 63 6f | 72 64 73 20 6d 61 79 20 |nfo reco|rds may | |00002e50| 62 65 0d 09 61 64 6a 75 | 73 74 65 64 3a 0d 09 0d |be..adju|sted:...| |00002e60| 09 09 70 61 72 74 4e 75 | 6d 20 3d 20 70 61 72 74 |..partNu|m = part| |00002e70| 20 6e 75 6d 62 65 72 2c | 20 6f 72 20 30 78 37 66 | number,| or 0x7f| |00002e80| 66 66 20 69 66 20 6e 6f | 74 20 61 20 70 61 72 74 |ff if no|t a part| |00002e90| 2e 0d 09 09 6e 75 6d 50 | 61 72 74 73 20 3d 20 6e |....numP|arts = n| |00002ea0| 75 6d 62 65 72 20 6f 66 | 20 70 61 72 74 73 2c 20 |umber of| parts, | |00002eb0| 30 72 20 30 78 37 66 66 | 66 20 69 66 20 6e 6f 74 |0r 0x7ff|f if not| |00002ec0| 20 61 20 70 61 72 74 2e | 0d 2d 2d 2d 2d 2d 2d 2d | a part.|.-------| |00002ed0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002ee0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002ef0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002f00| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00002f10| 2d 2d 2d 2d 2d 2a 2f 0d | 0d 73 74 61 74 69 63 20 |-----*/.|.static | |00002f20| 4f 53 45 72 72 20 50 72 | 6f 63 65 73 73 54 68 72 |OSErr Pr|ocessThr| |00002f30| 65 61 64 20 28 54 53 6f | 72 74 49 6e 66 6f 20 2a |ead (TSo|rtInfo *| |00002f40| 2a 74 68 72 65 61 64 48 | 65 61 64 50 74 72 2c 20 |*threadH|eadPtr, | |00002f50| 54 53 6f 72 74 49 6e 66 | 6f 20 2a 2a 74 68 72 65 |TSortInf|o **thre| |00002f60| 61 64 45 6e 64 50 74 72 | 29 0d 7b 0d 09 54 53 6f |adEndPtr|).{..TSo| |00002f70| 72 74 49 6e 66 6f 20 2a | 2a 73 2c 20 2a 78 3b 0d |rtInfo *|*s, *x;.| |00002f80| 09 54 53 75 62 6a 65 63 | 74 20 2a 71 2c 20 2a 70 |.TSubjec|t *q, *p| |00002f90| 72 65 76 49 6e 4c 69 73 | 74 3b 0d 09 73 68 6f 72 |revInLis|t;..shor| |00002fa0| 74 20 74 68 72 65 61 64 | 4c 65 6e 67 74 68 2c 20 |t thread|Length, | |00002fb0| 74 68 72 65 61 64 48 65 | 61 64 4e 75 6d 62 65 72 |threadHe|adNumber| |00002fc0| 2c 20 74 68 72 65 61 64 | 48 65 61 64 49 6e 64 65 |, thread|HeadInde| |00002fd0| 78 2c 20 74 68 72 65 61 | 64 4f 72 64 69 6e 61 6c |x, threa|dOrdinal| |00002fe0| 3b 0d 09 73 68 6f 72 74 | 20 6e 75 6d 50 61 72 74 |;..short| numPart| |00002ff0| 73 2c 20 6c 61 73 74 50 | 61 72 74 2c 20 6e 75 6d |s, lastP|art, num| |00003000| 41 72 74 73 57 68 69 63 | 68 41 72 65 50 61 72 74 |ArtsWhic|hArePart| |00003010| 73 3b 0d 09 42 6f 6f 6c | 65 61 6e 20 69 6e 4c 69 |s;..Bool|ean inLi| |00003020| 73 74 2c 20 69 6e 63 6f | 6d 70 6c 65 74 65 2c 20 |st, inco|mplete, | |00003030| 68 61 76 65 4e 6f 6e 50 | 6f 74 65 6e 74 69 61 6c |haveNonP|otential| |00003040| 50 61 72 74 2c 20 63 61 | 63 68 65 50 61 72 74 73 |Part, ca|cheParts| |00003050| 3b 0d 09 42 6f 6f 6c 65 | 61 6e 20 68 61 76 65 4e |;..Boole|an haveN| |00003060| 65 77 50 61 72 74 2c 20 | 63 6f 6d 70 6c 65 74 65 |ewPart, |complete| |00003070| 2c 20 68 61 76 65 4f 6c | 64 50 61 72 74 3b 0d 09 |, haveOl|dPart;..| |00003080| 43 53 74 72 32 35 35 20 | 73 75 62 6a 65 63 74 2c |CStr255 |subject,| |00003090| 20 61 75 74 68 6f 72 3b | 0d 09 4f 53 45 72 72 20 | author;|..OSErr | |000030a0| 65 72 72 20 3d 20 6e 6f | 45 72 72 3b 0d 09 0d 09 |err = no|Err;....| |000030b0| 6e 75 6d 50 61 72 74 73 | 20 3d 20 30 3b 0d 09 68 |numParts| = 0;..h| |000030c0| 61 76 65 4e 65 77 50 61 | 72 74 20 3d 20 66 61 6c |aveNewPa|rt = fal| |000030d0| 73 65 3b 0d 09 68 61 76 | 65 4f 6c 64 50 61 72 74 |se;..hav|eOldPart| |000030e0| 20 3d 20 66 61 6c 73 65 | 3b 0d 09 6e 75 6d 41 72 | = false|;..numAr| |000030f0| 74 73 57 68 69 63 68 41 | 72 65 50 61 72 74 73 20 |tsWhichA|reParts | |00003100| 3d 20 30 3b 0d 09 68 61 | 76 65 4e 6f 6e 50 6f 74 |= 0;..ha|veNonPot| |00003110| 65 6e 74 69 61 6c 50 61 | 72 74 20 3d 20 66 61 6c |entialPa|rt = fal| |00003120| 73 65 3b 0d 09 66 6f 72 | 20 28 73 20 3d 20 74 68 |se;..for| (s = th| |00003130| 72 65 61 64 48 65 61 64 | 50 74 72 3b 20 73 20 3c |readHead|Ptr; s <| |00003140| 20 74 68 72 65 61 64 45 | 6e 64 50 74 72 3b 20 73 | threadE|ndPtr; s| |00003150| 2b 2b 29 20 7b 0d 09 09 | 78 20 3d 20 2a 73 3b 0d |++) {...|x = *s;.| |00003160| 09 09 69 66 20 28 78 2d | 3e 66 72 6f 6d 43 61 63 |..if (x-|>fromCac| |00003170| 68 65 20 26 26 20 78 2d | 3e 6e 75 6d 50 61 72 74 |he && x-|>numPart| |00003180| 73 20 3c 20 30 78 37 66 | 66 66 29 20 68 61 76 65 |s < 0x7f|ff) have| |00003190| 4f 6c 64 50 61 72 74 20 | 3d 20 74 72 75 65 3b 0d |OldPart |= true;.| |000031a0| 09 09 69 66 20 28 21 78 | 2d 3e 66 72 6f 6d 43 61 |..if (!x|->fromCa| |000031b0| 63 68 65 20 26 26 20 78 | 2d 3e 6e 75 6d 50 61 72 |che && x|->numPar| |000031c0| 74 73 20 3c 20 30 78 37 | 66 66 66 29 20 68 61 76 |ts < 0x7|fff) hav| |000031d0| 65 4e 65 77 50 61 72 74 | 20 3d 20 74 72 75 65 3b |eNewPart| = true;| |000031e0| 0d 09 09 69 66 20 28 78 | 2d 3e 6e 75 6d 50 61 72 |...if (x|->numPar| |000031f0| 74 73 20 3c 20 30 78 37 | 66 66 66 29 20 7b 0d 09 |ts < 0x7|fff) {..| |00003200| 09 09 69 66 20 28 78 2d | 3e 6e 75 6d 50 61 72 74 |..if (x-|>numPart| |00003210| 73 20 3e 20 6e 75 6d 50 | 61 72 74 73 29 20 6e 75 |s > numP|arts) nu| |00003220| 6d 50 61 72 74 73 20 3d | 20 78 2d 3e 6e 75 6d 50 |mParts =| x->numP| |00003230| 61 72 74 73 3b 0d 09 09 | 09 6e 75 6d 41 72 74 73 |arts;...|.numArts| |00003240| 57 68 69 63 68 41 72 65 | 50 61 72 74 73 2b 2b 3b |WhichAre|Parts++;| |00003250| 0d 09 09 09 69 66 20 28 | 21 78 2d 3e 70 6f 74 65 |....if (|!x->pote| |00003260| 6e 74 69 61 6c 50 61 72 | 74 29 20 68 61 76 65 4e |ntialPar|t) haveN| |00003270| 6f 6e 50 6f 74 65 6e 74 | 69 61 6c 50 61 72 74 20 |onPotent|ialPart | |00003280| 3d 20 74 72 75 65 3b 0d | 09 09 7d 0d 09 7d 0d 09 |= true;.|..}..}..| |00003290| 0d 09 69 66 20 28 6e 75 | 6d 41 72 74 73 57 68 69 |..if (nu|mArtsWhi| |000032a0| 63 68 41 72 65 50 61 72 | 74 73 20 3d 3d 20 30 29 |chArePar|ts == 0)| |000032b0| 20 7b 0d 09 09 69 6e 63 | 6f 6d 70 6c 65 74 65 20 | {...inc|omplete | |000032c0| 3d 20 66 61 6c 73 65 3b | 0d 09 09 63 61 63 68 65 |= false;|...cache| |000032d0| 50 61 72 74 73 20 3d 20 | 66 61 6c 73 65 3b 0d 09 |Parts = |false;..| |000032e0| 09 63 6f 6d 70 6c 65 74 | 65 20 3d 20 66 61 6c 73 |.complet|e = fals| |000032f0| 65 3b 0d 09 7d 20 65 6c | 73 65 20 69 66 20 28 6e |e;..} el|se if (n| |00003300| 75 6d 41 72 74 73 57 68 | 69 63 68 41 72 65 50 61 |umArtsWh|ichArePa| |00003310| 72 74 73 20 3d 3d 20 31 | 20 26 26 20 21 68 61 76 |rts == 1| && !hav| |00003320| 65 4e 6f 6e 50 6f 74 65 | 6e 74 69 61 6c 50 61 72 |eNonPote|ntialPar| |00003330| 74 29 20 7b 0d 09 09 69 | 6e 63 6f 6d 70 6c 65 74 |t) {...i|ncomplet| |00003340| 65 20 3d 20 66 61 6c 73 | 65 3b 0d 09 09 63 61 63 |e = fals|e;...cac| |00003350| 68 65 50 61 72 74 73 20 | 3d 20 74 72 75 65 3b 0d |heParts |= true;.| |00003360| 09 09 63 6f 6d 70 6c 65 | 74 65 20 3d 20 66 61 6c |..comple|te = fal| |00003370| 73 65 3b 0d 09 7d 20 65 | 6c 73 65 20 7b 0d 09 09 |se;..} e|lse {...| |00003380| 63 61 63 68 65 50 61 72 | 74 73 20 3d 20 74 72 75 |cachePar|ts = tru| |00003390| 65 3b 0d 09 09 6c 61 73 | 74 50 61 72 74 20 3d 20 |e;...las|tPart = | |000033a0| 30 3b 0d 09 09 66 6f 72 | 20 28 73 20 3d 20 74 68 |0;...for| (s = th| |000033b0| 72 65 61 64 48 65 61 64 | 50 74 72 3b 20 73 20 3c |readHead|Ptr; s <| |000033c0| 20 74 68 72 65 61 64 45 | 6e 64 50 74 72 3b 20 73 | threadE|ndPtr; s| |000033d0| 2b 2b 29 20 7b 0d 09 09 | 09 78 20 3d 20 2a 73 3b |++) {...|.x = *s;| |000033e0| 0d 09 09 09 69 66 20 28 | 78 2d 3e 70 61 72 74 4e |....if (|x->partN| |000033f0| 75 6d 20 3d 3d 20 6c 61 | 73 74 50 61 72 74 2b 31 |um == la|stPart+1| |00003400| 29 20 6c 61 73 74 50 61 | 72 74 20 3d 20 78 2d 3e |) lastPa|rt = x->| |00003410| 70 61 72 74 4e 75 6d 3b | 0d 09 09 7d 0d 09 09 63 |partNum;|...}...c| |00003420| 61 63 68 65 50 61 72 74 | 73 20 3d 20 69 6e 63 6f |achePart|s = inco| |00003430| 6d 70 6c 65 74 65 20 3d | 20 6c 61 73 74 50 61 72 |mplete =| lastPar| |00003440| 74 20 3c 20 6e 75 6d 50 | 61 72 74 73 3b 0d 09 09 |t < numP|arts;...| |00003450| 63 6f 6d 70 6c 65 74 65 | 20 3d 20 21 69 6e 63 6f |complete| = !inco| |00003460| 6d 70 6c 65 74 65 20 26 | 26 20 68 61 76 65 4f 6c |mplete &|& haveOl| |00003470| 64 50 61 72 74 3b 0d 09 | 7d 0d 09 0d 09 74 68 72 |dPart;..|}....thr| |00003480| 65 61 64 48 65 61 64 4e | 75 6d 62 65 72 20 3d 20 |eadHeadN|umber = | |00003490| 28 2a 2a 74 68 72 65 61 | 64 48 65 61 64 50 74 72 |(**threa|dHeadPtr| |000034a0| 29 2e 6e 75 6d 62 65 72 | 3b 0d 09 74 68 72 65 61 |).number|;..threa| |000034b0| 64 4f 72 64 69 6e 61 6c | 20 3d 20 31 3b 0d 09 66 |dOrdinal| = 1;..f| |000034c0| 6f 72 20 28 73 20 3d 20 | 74 68 72 65 61 64 48 65 |or (s = |threadHe| |000034d0| 61 64 50 74 72 3b 20 73 | 20 3c 20 74 68 72 65 61 |adPtr; s| < threa| |000034e0| 64 45 6e 64 50 74 72 3b | 20 73 2b 2b 29 20 7b 0d |dEndPtr;| s++) {.| |000034f0| 09 09 78 20 3d 20 2a 73 | 3b 0d 09 09 78 2d 3e 74 |..x = *s|;...x->t| |00003500| 68 72 65 61 64 48 65 61 | 64 4e 75 6d 62 65 72 20 |hreadHea|dNumber | |00003510| 3d 20 74 68 72 65 61 64 | 48 65 61 64 4e 75 6d 62 |= thread|HeadNumb| |00003520| 65 72 3b 0d 09 09 78 2d | 3e 74 68 72 65 61 64 4f |er;...x-|>threadO| |00003530| 72 64 69 6e 61 6c 20 3d | 20 74 68 72 65 61 64 4f |rdinal =| threadO| |00003540| 72 64 69 6e 61 6c 3b 0d | 09 09 71 20 3d 20 78 2d |rdinal;.|..q = x-| |00003550| 3e 73 75 62 6a 65 63 74 | 3b 0d 09 09 69 6e 4c 69 |>subject|;...inLi| |00003560| 73 74 20 3d 20 21 78 2d | 3e 66 72 6f 6d 43 61 63 |st = !x-|>fromCac| |00003570| 68 65 20 7c 7c 20 0d 09 | 09 09 28 21 69 6e 63 6f |he || ..|..(!inco| |00003580| 6d 70 6c 65 74 65 20 26 | 26 20 68 61 76 65 4e 65 |mplete &|& haveNe| |00003590| 77 50 61 72 74 20 26 26 | 20 78 2d 3e 6e 75 6d 50 |wPart &&| x->numP| |000035a0| 61 72 74 73 20 3c 20 30 | 78 37 66 66 66 29 3b 0d |arts < 0|x7fff);.| |000035b0| 09 09 69 66 20 28 69 6e | 4c 69 73 74 29 20 7b 0d |..if (in|List) {.| |000035c0| 09 09 09 69 66 20 28 74 | 68 72 65 61 64 4f 72 64 |...if (t|hreadOrd| |000035d0| 69 6e 61 6c 20 3d 3d 20 | 31 29 20 74 68 72 65 61 |inal == |1) threa| |000035e0| 64 48 65 61 64 49 6e 64 | 65 78 20 3d 20 78 2d 3e |dHeadInd|ex = x->| |000035f0| 69 6e 64 65 78 3b 0d 09 | 09 09 69 66 20 28 63 61 |index;..|..if (ca| |00003600| 63 68 65 50 61 72 74 73 | 20 26 26 20 21 78 2d 3e |cheParts| && !x->| |00003610| 66 72 6f 6d 43 61 63 68 | 65 20 26 26 20 78 2d 3e |fromCach|e && x->| |00003620| 70 61 72 74 4e 75 6d 20 | 3c 20 30 78 37 66 66 66 |partNum |< 0x7fff| |00003630| 20 26 26 20 0d 09 09 09 | 09 67 50 61 72 65 6e 74 | && ....|.gParent| |00003640| 49 73 55 73 65 72 47 72 | 6f 75 70 4c 69 73 74 29 |IsUserGr|oupList)| |00003650| 20 0d 09 09 09 7b 0d 09 | 09 09 09 2f 2a 20 54 68 | ....{..|.../* Th| |00003660| 69 73 20 69 73 20 61 20 | 6e 65 77 20 70 61 72 74 |is is a |new part| |00003670| 20 69 6e 20 61 6e 20 69 | 6e 63 6f 6d 70 6c 65 74 | in an i|ncomplet| |00003680| 65 20 74 68 72 65 61 64 | 20 2d 20 0d 09 09 09 09 |e thread| - .....| |00003690| 20 20 20 61 64 64 20 69 | 74 20 74 6f 20 74 68 65 | add i|t to the| |000036a0| 20 63 61 63 68 65 20 2a | 2f 0d 09 09 09 09 73 74 | cache *|/.....st| |000036b0| 72 63 70 79 28 73 75 62 | 6a 65 63 74 2c 20 2a 67 |rcpy(sub|ject, *g| |000036c0| 53 74 72 69 6e 67 73 20 | 2b 20 71 2d 3e 73 75 62 |Strings |+ q->sub| |000036d0| 6a 65 63 74 4f 66 66 73 | 65 74 29 3b 0d 09 09 09 |jectOffs|et);....| |000036e0| 09 73 74 72 63 70 79 28 | 61 75 74 68 6f 72 2c 20 |.strcpy(|author, | |000036f0| 2a 67 53 74 72 69 6e 67 | 73 20 2b 20 71 2d 3e 61 |*gString|s + q->a| |00003700| 75 74 68 6f 72 4f 66 66 | 73 65 74 29 3b 0d 09 09 |uthorOff|set);...| |00003710| 09 09 65 72 72 20 3d 20 | 41 64 64 43 61 63 68 65 |..err = |AddCache| |00003720| 64 41 72 74 69 63 6c 65 | 28 67 47 72 6f 75 70 4e |dArticle|(gGroupN| |00003730| 61 6d 65 2c 20 71 2d 3e | 6e 75 6d 62 65 72 2c 20 |ame, q->|number, | |00003740| 73 75 62 6a 65 63 74 2c | 20 61 75 74 68 6f 72 29 |subject,| author)| |00003750| 3b 0d 09 09 09 09 69 66 | 20 28 65 72 72 20 21 3d |;.....if| (err !=| |00003760| 20 6e 6f 45 72 72 29 20 | 72 65 74 75 72 6e 20 65 | noErr) |return e| |00003770| 72 72 3b 0d 09 09 09 7d | 20 65 6c 73 65 20 69 66 |rr;....}| else if| |00003780| 20 28 21 69 6e 63 6f 6d | 70 6c 65 74 65 20 26 26 | (!incom|plete &&| |00003790| 20 78 2d 3e 66 72 6f 6d | 43 61 63 68 65 20 26 26 | x->from|Cache &&| |000037a0| 20 78 2d 3e 70 61 72 74 | 4e 75 6d 20 3c 20 30 78 | x->part|Num < 0x| |000037b0| 37 66 66 66 20 26 26 0d | 09 09 09 09 67 50 61 72 |7fff &&.|....gPar| |000037c0| 65 6e 74 49 73 55 73 65 | 72 47 72 6f 75 70 4c 69 |entIsUse|rGroupLi| |000037d0| 73 74 29 20 0d 09 09 09 | 7b 0d 09 09 09 09 2f 2a |st) ....|{...../*| |000037e0| 20 54 68 69 73 20 69 73 | 20 70 61 72 74 20 6f 66 | This is| part of| |000037f0| 20 61 20 74 68 72 65 61 | 64 20 77 68 69 63 68 20 | a threa|d which | |00003800| 69 73 20 6e 6f 77 0d 09 | 09 09 09 20 20 20 63 6f |is now..|... co| |00003810| 6d 70 6c 65 74 65 20 2d | 20 72 65 6d 6f 76 65 20 |mplete -| remove | |00003820| 69 74 20 66 72 6f 6d 20 | 74 68 65 20 63 61 63 68 |it from |the cach| |00003830| 65 20 2a 2f 0d 09 09 09 | 09 65 72 72 20 3d 20 44 |e */....|.err = D| |00003840| 65 6c 65 74 65 43 61 63 | 68 65 64 41 72 74 69 63 |eleteCac|hedArtic| |00003850| 6c 65 28 67 47 72 6f 75 | 70 4e 61 6d 65 2c 20 71 |le(gGrou|pName, q| |00003860| 2d 3e 6e 75 6d 62 65 72 | 29 3b 0d 09 09 09 09 69 |->number|);.....i| |00003870| 66 20 28 65 72 72 20 21 | 3d 20 6e 6f 45 72 72 29 |f (err !|= noErr)| |00003880| 20 72 65 74 75 72 6e 20 | 65 72 72 3b 0d 09 09 09 | return |err;....| |00003890| 7d 0d 09 09 09 71 2d 3e | 74 68 72 65 61 64 48 65 |}....q->|threadHe| |000038a0| 61 64 49 6e 64 65 78 20 | 3d 20 74 68 72 65 61 64 |adIndex |= thread| |000038b0| 48 65 61 64 49 6e 64 65 | 78 3b 0d 09 09 09 71 2d |HeadInde|x;....q-| |000038c0| 3e 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 20 3d |>threadO|rdinal =| |000038d0| 20 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 3b 0d | threadO|rdinal;.| |000038e0| 09 09 09 69 66 20 28 6e | 75 6d 41 72 74 73 57 68 |...if (n|umArtsWh| |000038f0| 69 63 68 41 72 65 50 61 | 72 74 73 20 3d 3d 20 31 |ichArePa|rts == 1| |00003900| 20 26 26 20 78 2d 3e 70 | 6f 74 65 6e 74 69 61 6c | && x->p|otential| |00003910| 50 61 72 74 29 0d 09 09 | 09 09 78 2d 3e 70 61 72 |Part)...|..x->par| |00003920| 74 4e 75 6d 20 3d 20 78 | 2d 3e 6e 75 6d 50 61 72 |tNum = x|->numPar| |00003930| 74 73 20 3d 20 30 78 37 | 66 66 66 3b 0d 09 09 09 |ts = 0x7|fff;....| |00003940| 71 2d 3e 70 61 72 74 4e | 75 6d 20 3d 20 78 2d 3e |q->partN|um = x->| |00003950| 70 61 72 74 4e 75 6d 3b | 0d 09 09 09 71 2d 3e 6e |partNum;|....q->n| |00003960| 75 6d 50 61 72 74 73 20 | 3d 20 78 2d 3e 6e 75 6d |umParts |= x->num| |00003970| 50 61 72 74 73 3b 0d 09 | 09 09 71 2d 3e 72 65 61 |Parts;..|..q->rea| |00003980| 64 20 3d 20 66 61 6c 73 | 65 3b 0d 09 09 09 71 2d |d = fals|e;....q-| |00003990| 3e 69 6e 63 6f 6d 70 6c | 65 74 65 20 3d 20 69 6e |>incompl|ete = in| |000039a0| 63 6f 6d 70 6c 65 74 65 | 3b 0d 09 09 09 71 2d 3e |complete|;....q->| |000039b0| 63 6f 6d 70 6c 65 74 65 | 20 3d 20 63 6f 6d 70 6c |complete| = compl| |000039c0| 65 74 65 3b 0d 09 09 09 | 71 2d 3e 69 6e 4c 69 73 |ete;....|q->inLis| |000039d0| 74 20 3d 20 74 72 75 65 | 3b 0d 09 09 09 74 68 72 |t = true|;....thr| |000039e0| 65 61 64 4f 72 64 69 6e | 61 6c 2b 2b 3b 0d 09 09 |eadOrdin|al++;...| |000039f0| 7d 20 65 6c 73 65 20 7b | 0d 09 09 09 71 2d 3e 69 |} else {|....q->i| |00003a00| 6e 4c 69 73 74 20 3d 20 | 66 61 6c 73 65 3b 0d 09 |nList = |false;..| |00003a10| 09 7d 0d 09 7d 0d 09 0d | 09 74 68 72 65 61 64 4c |.}..}...|.threadL| |00003a20| 65 6e 67 74 68 20 3d 20 | 74 68 72 65 61 64 4f 72 |ength = |threadOr| |00003a30| 64 69 6e 61 6c 20 2d 20 | 31 3b 0d 09 69 66 20 28 |dinal - |1;..if (| |00003a40| 74 68 72 65 61 64 4c 65 | 6e 67 74 68 20 3d 3d 20 |threadLe|ngth == | |00003a50| 30 29 20 72 65 74 75 72 | 6e 20 6e 6f 45 72 72 3b |0) retur|n noErr;| |00003a60| 0d 09 0d 09 70 72 65 76 | 49 6e 4c 69 73 74 20 3d |....prev|InList =| |00003a70| 20 6e 69 6c 3b 0d 09 66 | 6f 72 20 28 73 20 3d 20 | nil;..f|or (s = | |00003a80| 74 68 72 65 61 64 48 65 | 61 64 50 74 72 3b 20 73 |threadHe|adPtr; s| |00003a90| 20 3c 20 74 68 72 65 61 | 64 45 6e 64 50 74 72 3b | < threa|dEndPtr;| |00003aa0| 20 73 2b 2b 29 20 7b 0d | 09 09 78 20 3d 20 2a 73 | s++) {.|..x = *s| |00003ab0| 3b 0d 09 09 71 20 3d 20 | 78 2d 3e 73 75 62 6a 65 |;...q = |x->subje| |00003ac0| 63 74 3b 0d 09 09 69 66 | 20 28 71 2d 3e 69 6e 4c |ct;...if| (q->inL| |00003ad0| 69 73 74 29 20 7b 0d 09 | 09 09 71 2d 3e 74 68 72 |ist) {..|..q->thr| |00003ae0| 65 61 64 4c 65 6e 67 74 | 68 20 3d 20 74 68 72 65 |eadLengt|h = thre| |00003af0| 61 64 4c 65 6e 67 74 68 | 3b 0d 09 09 09 69 66 20 |adLength|;....if | |00003b00| 28 70 72 65 76 49 6e 4c | 69 73 74 20 21 3d 20 6e |(prevInL|ist != n| |00003b10| 69 6c 29 20 70 72 65 76 | 49 6e 4c 69 73 74 2d 3e |il) prev|InList->| |00003b20| 6e 65 78 74 49 6e 54 68 | 72 65 61 64 20 3d 20 78 |nextInTh|read = x| |00003b30| 2d 3e 69 6e 64 65 78 3b | 0d 09 09 09 70 72 65 76 |->index;|....prev| |00003b40| 49 6e 4c 69 73 74 20 3d | 20 71 3b 0d 09 09 7d 0d |InList =| q;...}.| |00003b50| 09 7d 0d 09 70 72 65 76 | 49 6e 4c 69 73 74 2d 3e |.}..prev|InList->| |00003b60| 6e 65 78 74 49 6e 54 68 | 72 65 61 64 20 3d 20 2d |nextInTh|read = -| |00003b70| 31 3b 0d 09 0d 09 72 65 | 74 75 72 6e 20 6e 6f 45 |1;....re|turn noE| |00003b80| 72 72 3b 0d 7d 0d 0d 0d | 0d 2f 2a 2d 2d 2d 2d 2d |rr;.}...|./*-----| |00003b90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003ba0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003bb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003bc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003bd0| 2d 2d 2d 2d 2d 2d 2d 0d | 09 53 6f 72 74 41 72 72 |-------.|.SortArr| |00003be0| 61 79 20 0d 09 0d 09 53 | 6f 72 74 20 74 68 65 20 |ay ....S|ort the | |00003bf0| 61 72 72 61 79 20 6f 66 | 20 54 53 6f 72 74 49 6e |array of| TSortIn| |00003c00| 66 6f 20 70 6f 69 6e 74 | 65 72 73 20 69 6e 74 6f |fo point|ers into| |00003c10| 20 74 68 72 65 61 64 20 | 6f 72 64 65 72 2e 20 0d | thread |order. .| |00003c20| 09 0d 09 45 6e 74 72 79 | 3a 09 73 6f 72 74 49 6e |...Entry|:.sortIn| |00003c30| 66 6f 50 74 72 73 20 3d | 20 70 6f 69 6e 74 65 72 |foPtrs =| pointer| |00003c40| 20 74 6f 20 61 72 72 61 | 79 20 6f 66 20 70 6f 69 | to arra|y of poi| |00003c50| 6e 74 65 72 73 20 74 6f | 20 54 53 6f 72 74 49 6e |nters to| TSortIn| |00003c60| 66 6f 20 72 65 63 6f 72 | 64 73 2e 0d 09 09 09 6e |fo recor|ds.....n| |00003c70| 75 6d 53 75 62 6a 65 63 | 74 73 20 3d 20 6e 75 6d |umSubjec|ts = num| |00003c80| 62 65 72 20 6f 66 20 73 | 75 62 6a 65 63 74 73 2e |ber of s|ubjects.| |00003c90| 0d 09 09 09 0d 09 45 78 | 69 74 3a 09 66 75 6e 63 |......Ex|it:.func| |00003ca0| 74 69 6f 6e 20 72 65 73 | 75 6c 74 20 3d 20 65 72 |tion res|ult = er| |00003cb0| 72 6f 72 20 63 6f 64 65 | 2e 20 0d 2d 2d 2d 2d 2d |ror code|. .-----| |00003cc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003cd0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003ce0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003cf0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00003d00| 2d 2d 2d 2d 2d 2d 2d 2a | 2f 0d 0d 73 74 61 74 69 |-------*|/..stati| |00003d10| 63 20 4f 53 45 72 72 20 | 53 6f 72 74 41 72 72 61 |c OSErr |SortArra| |00003d20| 79 20 28 54 53 6f 72 74 | 49 6e 66 6f 50 74 72 20 |y (TSort|InfoPtr | |00003d30| 2a 73 6f 72 74 49 6e 66 | 6f 50 74 72 73 2c 20 73 |*sortInf|oPtrs, s| |00003d40| 68 6f 72 74 20 6e 75 6d | 53 75 62 6a 65 63 74 73 |hort num|Subjects| |00003d50| 29 0d 7b 0d 09 54 53 6f | 72 74 49 6e 66 6f 20 2a |).{..TSo|rtInfo *| |00003d60| 2a 72 2c 20 2a 2a 74 68 | 72 65 61 64 48 65 61 64 |*r, **th|readHead| |00003d70| 50 74 72 3b 0d 09 63 68 | 61 72 20 2a 74 68 72 65 |Ptr;..ch|ar *thre| |00003d80| 61 64 48 65 61 64 53 75 | 62 6a 65 63 74 3b 0d 09 |adHeadSu|bject;..| |00003d90| 42 6f 6f 6c 65 61 6e 20 | 6e 65 77 54 68 72 65 61 |Boolean |newThrea| |00003da0| 64 3b 0d 09 73 68 6f 72 | 74 20 69 3b 0d 09 4f 53 |d;..shor|t i;..OS| |00003db0| 45 72 72 20 65 72 72 20 | 3d 20 6e 6f 45 72 72 3b |Err err |= noErr;| |00003dc0| 0d 09 0d 09 2f 2a 09 53 | 6f 72 74 20 74 68 65 20 |..../*.S|ort the | |00003dd0| 70 6f 69 6e 74 65 72 20 | 61 72 72 61 79 20 69 6e |pointer |array in| |00003de0| 74 6f 20 69 6e 63 72 65 | 61 73 69 6e 67 20 6f 72 |to incre|asing or| |00003df0| 64 65 72 20 62 79 20 63 | 61 6e 6f 6e 69 63 61 6c |der by c|anonical| |00003e00| 20 73 75 62 6a 65 63 74 | 2e 20 0d 09 09 54 68 69 | subject|. ...Thi| |00003e10| 73 20 62 72 69 6e 67 73 | 20 74 68 72 65 61 64 73 |s brings| threads| |00003e20| 20 74 6f 67 65 74 68 65 | 72 2c 20 61 6c 74 68 6f | togethe|r, altho| |00003e30| 75 67 68 20 74 68 65 20 | 74 68 72 65 61 64 73 20 |ugh the |threads | |00003e40| 61 72 65 20 6e 6f 74 20 | 69 6e 20 74 68 65 20 0d |are not |in the .| |00003e50| 09 09 72 69 67 68 74 20 | 6f 72 64 65 72 20 79 65 |..right |order ye| |00003e60| 74 2e 20 54 68 65 20 61 | 72 74 69 63 6c 65 20 6e |t. The a|rticle n| |00003e70| 75 6d 62 65 72 73 20 61 | 72 65 20 75 73 65 64 20 |umbers a|re used | |00003e80| 61 73 20 61 20 73 65 63 | 6f 6e 64 61 72 79 20 73 |as a sec|ondary s| |00003e90| 6f 72 74 20 0d 09 09 6b | 65 79 20 74 6f 20 6b 65 |ort ...k|ey to ke| |00003ea0| 70 20 74 68 65 20 61 72 | 74 69 63 6c 65 73 20 77 |p the ar|ticles w| |00003eb0| 69 74 68 69 6e 20 61 20 | 74 68 72 65 61 64 20 69 |ithin a |thread i| |00003ec0| 6e 20 74 68 65 20 63 6f | 72 72 65 63 74 20 6f 72 |n the co|rrect or| |00003ed0| 64 65 72 2e 20 2a 2f 0d | 09 09 0d 09 65 72 72 20 |der. */.|....err | |00003ee0| 3d 20 46 61 73 74 51 53 | 6f 72 74 28 73 6f 72 74 |= FastQS|ort(sort| |00003ef0| 49 6e 66 6f 50 74 72 73 | 2c 20 6e 75 6d 53 75 62 |InfoPtrs|, numSub| |00003f00| 6a 65 63 74 73 2c 20 73 | 69 7a 65 6f 66 28 54 53 |jects, s|izeof(TS| |00003f10| 6f 72 74 49 6e 66 6f 50 | 74 72 29 2c 0d 09 09 28 |ortInfoP|tr),...(| |00003f20| 53 6f 72 74 43 6d 70 46 | 75 6e 63 74 69 6f 6e 29 |SortCmpF|unction)| |00003f30| 53 6f 72 74 53 75 62 6a | 65 63 74 41 72 72 61 79 |SortSubj|ectArray| |00003f40| 43 6f 6d 70 61 72 65 31 | 29 3b 0d 09 69 66 20 28 |Compare1|);..if (| |00003f50| 65 72 72 20 21 3d 20 6e | 6f 45 72 72 29 20 72 65 |err != n|oErr) re| |00003f60| 74 75 72 6e 20 65 72 72 | 3b 0d 09 0d 09 2f 2a 09 |turn err|;..../*.| |00003f70| 50 72 6f 63 65 73 73 20 | 74 68 65 20 74 68 72 65 |Process |the thre| |00003f80| 61 64 73 2e 20 2a 2f 0d | 09 09 0d 09 66 6f 72 20 |ads. */.|....for | |00003f90| 28 69 20 3d 20 30 2c 20 | 72 20 3d 20 73 6f 72 74 |(i = 0, |r = sort| |00003fa0| 49 6e 66 6f 50 74 72 73 | 3b 20 69 20 3c 20 6e 75 |InfoPtrs|; i < nu| |00003fb0| 6d 53 75 62 6a 65 63 74 | 73 3b 20 69 2b 2b 2c 20 |mSubject|s; i++, | |00003fc0| 72 2b 2b 29 20 7b 0d 09 | 09 6e 65 77 54 68 72 65 |r++) {..|.newThre| |00003fd0| 61 64 20 3d 20 69 20 3d | 3d 20 30 20 7c 7c 20 73 |ad = i =|= 0 || s| |00003fe0| 74 72 63 6d 70 28 28 2a | 2a 72 29 2e 63 61 6e 6f |trcmp((*|*r).cano| |00003ff0| 6e 2c 20 74 68 72 65 61 | 64 48 65 61 64 53 75 62 |n, threa|dHeadSub| |00004000| 6a 65 63 74 29 20 21 3d | 20 30 3b 0d 09 09 69 66 |ject) !=| 0;...if| |00004010| 20 28 6e 65 77 54 68 72 | 65 61 64 29 20 7b 0d 09 | (newThr|ead) {..| |00004020| 09 09 69 66 20 28 69 20 | 21 3d 20 30 29 20 7b 0d |..if (i |!= 0) {.| |00004030| 09 09 09 09 65 72 72 20 | 3d 20 50 72 6f 63 65 73 |....err |= Proces| |00004040| 73 54 68 72 65 61 64 28 | 74 68 72 65 61 64 48 65 |sThread(|threadHe| |00004050| 61 64 50 74 72 2c 20 72 | 29 3b 0d 09 09 09 09 69 |adPtr, r|);.....i| |00004060| 66 20 28 65 72 72 20 21 | 3d 20 6e 6f 45 72 72 29 |f (err !|= noErr)| |00004070| 20 72 65 74 75 72 6e 20 | 65 72 72 3b 0d 09 09 09 | return |err;....| |00004080| 7d 0d 09 09 09 74 68 72 | 65 61 64 48 65 61 64 50 |}....thr|eadHeadP| |00004090| 74 72 20 3d 20 72 3b 0d | 09 09 09 74 68 72 65 61 |tr = r;.|...threa| |000040a0| 64 48 65 61 64 53 75 62 | 6a 65 63 74 20 3d 20 28 |dHeadSub|ject = (| |000040b0| 2a 2a 72 29 2e 63 61 6e | 6f 6e 3b 0d 09 09 7d 0d |**r).can|on;...}.| |000040c0| 09 7d 0d 09 65 72 72 20 | 3d 20 50 72 6f 63 65 73 |.}..err |= Proces| |000040d0| 73 54 68 72 65 61 64 28 | 74 68 72 65 61 64 48 65 |sThread(|threadHe| |000040e0| 61 64 50 74 72 2c 20 72 | 29 3b 0d 09 69 66 20 28 |adPtr, r|);..if (| |000040f0| 65 72 72 20 21 3d 20 6e | 6f 45 72 72 29 20 72 65 |err != n|oErr) re| |00004100| 74 75 72 6e 20 65 72 72 | 3b 0d 09 0d 09 2f 2a 09 |turn err|;..../*.| |00004110| 53 6f 72 74 20 74 68 65 | 20 70 6f 69 6e 74 65 72 |Sort the| pointer| |00004120| 20 61 72 72 61 79 20 69 | 6e 74 6f 20 66 69 6e 61 | array i|nto fina| |00004130| 6c 20 74 68 72 65 61 64 | 20 6f 72 64 65 72 2e 20 |l thread| order. | |00004140| 54 68 65 20 70 72 69 6d | 61 72 79 0d 09 09 73 6f |The prim|ary...so| |00004150| 72 74 20 6b 65 79 20 69 | 73 20 74 68 72 65 61 64 |rt key i|s thread| |00004160| 48 65 61 64 4e 75 6d 62 | 65 72 2e 20 54 68 65 20 |HeadNumb|er. The | |00004170| 73 65 63 6f 6e 64 61 72 | 79 20 73 6f 72 74 20 6b |secondar|y sort k| |00004180| 65 79 20 69 73 20 74 68 | 65 0d 09 09 74 68 72 65 |ey is th|e...thre| |00004190| 61 64 20 6f 72 64 69 6e | 61 6c 2e 20 54 68 69 73 |ad ordin|al. This| |000041a0| 20 66 69 6e 61 6c 20 73 | 6f 72 74 20 73 6f 72 74 | final s|ort sort| |000041b0| 73 20 74 68 65 20 74 68 | 72 65 61 64 73 20 69 6e |s the th|reads in| |000041c0| 74 6f 20 70 72 6f 70 65 | 72 20 0d 09 09 63 68 72 |to prope|r ...chr| |000041d0| 6f 6e 6f 6c 6f 67 69 63 | 61 6c 20 6f 72 64 65 72 |onologic|al order| |000041e0| 2c 20 6b 65 65 70 69 6e | 67 20 74 68 65 20 61 72 |, keepin|g the ar| |000041f0| 74 69 63 6c 65 73 20 77 | 69 74 68 69 6e 20 74 68 |ticles w|ithin th| |00004200| 65 20 74 68 72 65 61 64 | 73 20 0d 09 09 74 6f 67 |e thread|s ...tog| |00004210| 65 74 68 65 72 2e 20 2a | 2f 0d 09 09 0d 09 72 65 |ether. *|/.....re| |00004220| 74 75 72 6e 20 46 61 73 | 74 51 53 6f 72 74 28 73 |turn Fas|tQSort(s| |00004230| 6f 72 74 49 6e 66 6f 50 | 74 72 73 2c 20 6e 75 6d |ortInfoP|trs, num| |00004240| 53 75 62 6a 65 63 74 73 | 2c 20 73 69 7a 65 6f 66 |Subjects|, sizeof| |00004250| 28 54 53 6f 72 74 49 6e | 66 6f 50 74 72 29 2c 0d |(TSortIn|foPtr),.| |00004260| 09 09 28 53 6f 72 74 43 | 6d 70 46 75 6e 63 74 69 |..(SortC|mpFuncti| |00004270| 6f 6e 29 53 6f 72 74 53 | 75 62 6a 65 63 74 41 72 |on)SortS|ubjectAr| |00004280| 72 61 79 43 6f 6d 70 61 | 72 65 32 29 3b 0d 7d 0d |rayCompa|re2);.}.| |00004290| 0d 0d 0d 2f 2a 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.../*---|--------| |000042a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000042b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000042c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000042d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000042e0| 2d 0d 09 53 70 6c 69 74 | 50 61 72 74 54 68 72 65 |-..Split|PartThre| |000042f0| 61 64 73 0d 09 0d 09 53 | 70 6c 69 74 20 70 61 72 |ads....S|plit par| |00004300| 74 20 74 68 72 65 61 64 | 73 20 69 6e 74 6f 20 74 |t thread|s into t| |00004310| 77 6f 20 74 68 72 65 61 | 64 73 2c 20 74 68 65 20 |wo threa|ds, the | |00004320| 66 69 72 73 74 20 6f 6e | 65 20 63 6f 6e 74 61 69 |first on|e contai| |00004330| 6e 69 6e 67 20 6a 75 73 | 74 20 74 68 65 0d 09 70 |ning jus|t the..p| |00004340| 61 72 74 73 2c 20 61 6e | 64 20 74 68 65 20 73 65 |arts, an|d the se| |00004350| 63 6f 6e 64 20 6f 6e 65 | 20 63 6f 6e 74 61 69 6e |cond one| contain| |00004360| 69 6e 67 20 6a 75 73 74 | 20 74 68 65 20 66 6f 6c |ing just| the fol| |00004370| 6c 6f 77 75 70 73 2e 0d | 09 0d 09 45 6e 74 72 79 |lowups..|...Entry| |00004380| 3a 09 73 75 62 6a 65 63 | 74 41 72 72 61 79 20 3d |:.subjec|tArray =| |00004390| 20 70 6f 69 6e 74 65 72 | 20 74 6f 20 73 75 62 6a | pointer| to subj| |000043a0| 65 63 74 20 61 72 72 61 | 79 0d 09 09 09 6e 75 6d |ect arra|y....num| |000043b0| 53 75 62 6a 65 63 74 73 | 20 3d 20 6e 75 6d 62 65 |Subjects| = numbe| |000043c0| 72 20 6f 66 20 73 75 62 | 6a 65 63 74 73 2e 0d 2d |r of sub|jects..-| |000043d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000043e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000043f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004400| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004410| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2a 2f 0d 0d 73 |--------|---*/..s| |00004420| 74 61 74 69 63 20 76 6f | 69 64 20 53 70 6c 69 74 |tatic vo|id Split| |00004430| 50 61 72 74 54 68 72 65 | 61 64 73 20 28 54 53 75 |PartThre|ads (TSu| |00004440| 62 6a 65 63 74 20 2a 73 | 75 62 6a 65 63 74 41 72 |bject *s|ubjectAr| |00004450| 72 61 79 2c 20 73 68 6f | 72 74 20 6e 75 6d 53 75 |ray, sho|rt numSu| |00004460| 62 6a 65 63 74 73 29 0d | 7b 0d 09 73 68 6f 72 74 |bjects).|{..short| |00004470| 20 69 2c 20 6a 3b 0d 09 | 54 53 75 62 6a 65 63 74 | i, j;..|TSubject| |00004480| 20 2a 73 2c 20 2a 74 3b | 0d 09 73 68 6f 72 74 20 | *s, *t;|..short | |00004490| 70 61 72 74 73 54 68 72 | 65 61 64 4c 65 6e 67 74 |partsThr|eadLengt| |000044a0| 68 2c 20 66 6f 6c 6c 6f | 77 75 70 73 54 68 72 65 |h, follo|wupsThre| |000044b0| 61 64 4c 65 6e 67 74 68 | 3b 0d 09 73 68 6f 72 74 |adLength|;..short| |000044c0| 20 66 6f 6c 6c 6f 77 75 | 70 73 54 68 72 65 61 64 | followu|psThread| |000044d0| 48 65 61 64 49 6e 64 65 | 78 3b 0d 09 73 68 6f 72 |HeadInde|x;..shor| |000044e0| 74 20 6e 65 78 74 49 6e | 54 68 72 65 61 64 3b 0d |t nextIn|Thread;.| |000044f0| 09 09 0d 09 66 6f 72 20 | 28 69 20 3d 20 30 2c 20 |....for |(i = 0, | |00004500| 73 20 3d 20 73 75 62 6a | 65 63 74 41 72 72 61 79 |s = subj|ectArray| |00004510| 3b 20 69 20 3c 20 6e 75 | 6d 53 75 62 6a 65 63 74 |; i < nu|mSubject| |00004520| 73 3b 20 69 2b 2b 2c 20 | 73 2b 2b 29 20 7b 0d 09 |s; i++, |s++) {..| |00004530| 09 69 66 20 28 21 73 2d | 3e 69 6e 4c 69 73 74 29 |.if (!s-|>inList)| |00004540| 20 63 6f 6e 74 69 6e 75 | 65 3b 0d 09 09 69 66 20 | continu|e;...if | |00004550| 28 73 2d 3e 74 68 72 65 | 61 64 4f 72 64 69 6e 61 |(s->thre|adOrdina| |00004560| 6c 20 21 3d 20 31 29 20 | 63 6f 6e 74 69 6e 75 65 |l != 1) |continue| |00004570| 3b 0d 09 09 69 66 20 28 | 73 2d 3e 74 68 72 65 61 |;...if (|s->threa| |00004580| 64 4c 65 6e 67 74 68 20 | 3d 3d 20 31 29 20 63 6f |dLength |== 1) co| |00004590| 6e 74 69 6e 75 65 3b 0d | 09 09 69 66 20 28 73 2d |ntinue;.|..if (s-| |000045a0| 3e 70 61 72 74 4e 75 6d | 20 3d 3d 20 30 78 37 66 |>partNum| == 0x7f| |000045b0| 66 66 29 20 63 6f 6e 74 | 69 6e 75 65 3b 0d 09 09 |ff) cont|inue;...| |000045c0| 74 20 3d 20 73 3b 0d 09 | 09 70 61 72 74 73 54 68 |t = s;..|.partsTh| |000045d0| 72 65 61 64 4c 65 6e 67 | 74 68 20 3d 20 30 3b 0d |readLeng|th = 0;.| |000045e0| 09 09 77 68 69 6c 65 20 | 28 74 2d 3e 70 61 72 74 |..while |(t->part| |000045f0| 4e 75 6d 20 3c 20 30 78 | 37 66 66 66 20 26 26 20 |Num < 0x|7fff && | |00004600| 74 2d 3e 6e 65 78 74 49 | 6e 54 68 72 65 61 64 20 |t->nextI|nThread | |00004610| 21 3d 20 2d 31 29 20 7b | 0d 09 09 09 70 61 72 74 |!= -1) {|....part| |00004620| 73 54 68 72 65 61 64 4c | 65 6e 67 74 68 2b 2b 3b |sThreadL|ength++;| |00004630| 0d 09 09 09 74 20 3d 20 | 73 75 62 6a 65 63 74 41 |....t = |subjectA| |00004640| 72 72 61 79 20 2b 20 74 | 2d 3e 6e 65 78 74 49 6e |rray + t|->nextIn| |00004650| 54 68 72 65 61 64 3b 0d | 09 09 7d 0d 09 09 69 66 |Thread;.|..}...if| |00004660| 20 28 74 2d 3e 70 61 72 | 74 4e 75 6d 20 3c 20 30 | (t->par|tNum < 0| |00004670| 78 37 66 66 66 29 20 63 | 6f 6e 74 69 6e 75 65 3b |x7fff) c|ontinue;| |00004680| 0d 09 09 74 20 3d 20 73 | 3b 0d 09 09 66 6f 72 20 |...t = s|;...for | |00004690| 28 6a 20 3d 20 31 3b 20 | 6a 20 3c 3d 20 70 61 72 |(j = 1; |j <= par| |000046a0| 74 73 54 68 72 65 61 64 | 4c 65 6e 67 74 68 3b 20 |tsThread|Length; | |000046b0| 6a 2b 2b 29 20 7b 0d 09 | 09 09 74 2d 3e 74 68 72 |j++) {..|..t->thr| |000046c0| 65 61 64 4c 65 6e 67 74 | 68 20 3d 20 70 61 72 74 |eadLengt|h = part| |000046d0| 73 54 68 72 65 61 64 4c | 65 6e 67 74 68 3b 0d 09 |sThreadL|ength;..| |000046e0| 09 09 6e 65 78 74 49 6e | 54 68 72 65 61 64 20 3d |..nextIn|Thread =| |000046f0| 20 74 2d 3e 6e 65 78 74 | 49 6e 54 68 72 65 61 64 | t->next|InThread| |00004700| 3b 0d 09 09 09 69 66 20 | 28 6a 20 3d 3d 20 70 61 |;....if |(j == pa| |00004710| 72 74 73 54 68 72 65 61 | 64 4c 65 6e 67 74 68 29 |rtsThrea|dLength)| |00004720| 20 7b 0d 09 09 09 09 66 | 6f 6c 6c 6f 77 75 70 73 | {.....f|ollowups| |00004730| 54 68 72 65 61 64 48 65 | 61 64 49 6e 64 65 78 20 |ThreadHe|adIndex | |00004740| 3d 20 6e 65 78 74 49 6e | 54 68 72 65 61 64 3b 0d |= nextIn|Thread;.| |00004750| 09 09 09 09 74 2d 3e 6e | 65 78 74 49 6e 54 68 72 |....t->n|extInThr| |00004760| 65 61 64 20 3d 20 2d 31 | 3b 0d 09 09 09 7d 0d 09 |ead = -1|;....}..| |00004770| 09 09 74 20 3d 20 73 75 | 62 6a 65 63 74 41 72 72 |..t = su|bjectArr| |00004780| 61 79 20 2b 20 6e 65 78 | 74 49 6e 54 68 72 65 61 |ay + nex|tInThrea| |00004790| 64 3b 0d 09 09 7d 0d 09 | 09 66 6f 6c 6c 6f 77 75 |d;...}..|.followu| |000047a0| 70 73 54 68 72 65 61 64 | 4c 65 6e 67 74 68 20 3d |psThread|Length =| |000047b0| 20 74 2d 3e 74 68 72 65 | 61 64 4c 65 6e 67 74 68 | t->thre|adLength| |000047c0| 20 2d 20 70 61 72 74 73 | 54 68 72 65 61 64 4c 65 | - parts|ThreadLe| |000047d0| 6e 67 74 68 3b 0d 09 09 | 66 6f 72 20 28 6a 20 3d |ngth;...|for (j =| |000047e0| 20 31 3b 20 6a 20 3c 3d | 20 66 6f 6c 6c 6f 77 75 | 1; j <=| followu| |000047f0| 70 73 54 68 72 65 61 64 | 4c 65 6e 67 74 68 3b 20 |psThread|Length; | |00004800| 6a 2b 2b 29 20 7b 0d 09 | 09 09 74 2d 3e 74 68 72 |j++) {..|..t->thr| |00004810| 65 61 64 48 65 61 64 49 | 6e 64 65 78 20 3d 20 66 |eadHeadI|ndex = f| |00004820| 6f 6c 6c 6f 77 75 70 73 | 54 68 72 65 61 64 48 65 |ollowups|ThreadHe| |00004830| 61 64 49 6e 64 65 78 3b | 0d 09 09 09 74 2d 3e 74 |adIndex;|....t->t| |00004840| 68 72 65 61 64 4f 72 64 | 69 6e 61 6c 20 3d 20 6a |hreadOrd|inal = j| |00004850| 3b 0d 09 09 09 74 2d 3e | 74 68 72 65 61 64 4c 65 |;....t->|threadLe| |00004860| 6e 67 74 68 20 3d 20 66 | 6f 6c 6c 6f 77 75 70 73 |ngth = f|ollowups| |00004870| 54 68 72 65 61 64 4c 65 | 6e 67 74 68 3b 0d 09 09 |ThreadLe|ngth;...| |00004880| 09 74 2d 3e 69 6e 63 6f | 6d 70 6c 65 74 65 20 3d |.t->inco|mplete =| |00004890| 20 74 2d 3e 63 6f 6d 70 | 6c 65 74 65 20 3d 20 66 | t->comp|lete = f| |000048a0| 61 6c 73 65 3b 0d 09 09 | 09 74 20 3d 20 73 75 62 |alse;...|.t = sub| |000048b0| 6a 65 63 74 41 72 72 61 | 79 20 2b 20 74 2d 3e 6e |jectArra|y + t->n| |000048c0| 65 78 74 49 6e 54 68 72 | 65 61 64 3b 0d 09 09 7d |extInThr|ead;...}| |000048d0| 0d 09 7d 0d 7d 0d 0d 0d | 0d 2f 2a 2d 2d 2d 2d 2d |..}.}...|./*-----| |000048e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000048f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004900| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004910| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004920| 2d 2d 2d 2d 2d 2d 2d 0d | 09 53 6f 72 74 53 75 62 |-------.|.SortSub| |00004930| 6a 65 63 74 41 72 72 61 | 79 43 6f 6d 70 61 72 65 |jectArra|yCompare| |00004940| 33 0d 09 0d 09 54 68 69 | 73 20 69 73 20 74 68 65 |3....Thi|s is the| |00004950| 20 63 6f 6d 70 61 72 69 | 73 6f 6e 20 66 75 6e 63 | compari|son func| |00004960| 74 69 6f 6e 20 75 73 65 | 64 20 74 6f 20 73 6f 72 |tion use|d to sor| |00004970| 74 20 61 6e 20 61 72 72 | 61 79 20 6f 66 20 70 6f |t an arr|ay of po| |00004980| 69 6e 74 65 72 73 20 74 | 6f 20 0d 09 54 53 75 62 |inters t|o ..TSub| |00004990| 6a 65 63 74 20 72 65 63 | 6f 72 64 73 20 69 6e 74 |ject rec|ords int| |000049a0| 6f 20 69 6e 63 72 65 61 | 73 69 6e 67 20 6f 72 64 |o increa|sing ord| |000049b0| 65 72 20 62 79 20 61 72 | 74 69 63 6c 65 20 6e 75 |er by ar|ticle nu| |000049c0| 6d 62 65 72 2e 20 49 74 | 20 69 73 20 75 73 65 64 |mber. It| is used| |000049d0| 0d 09 62 79 20 74 68 65 | 20 42 75 69 6c 64 53 6f |..by the| BuildSo| |000049e0| 72 74 41 72 72 61 79 42 | 79 4e 75 6d 62 65 72 20 |rtArrayB|yNumber | |000049f0| 66 75 6e 63 74 69 6f 6e | 20 62 65 6c 6f 77 2e 0d |function| below..| |00004a00| 09 0d 09 45 6e 74 72 79 | 3a 09 70 20 3d 20 70 6f |...Entry|:.p = po| |00004a10| 69 6e 74 65 72 20 74 6f | 20 70 6f 69 6e 74 65 72 |inter to| pointer| |00004a20| 20 74 6f 20 54 53 75 62 | 6a 65 63 74 20 72 65 63 | to TSub|ject rec| |00004a30| 6f 72 64 2e 0d 09 09 09 | 71 20 3d 20 70 6f 69 6e |ord.....|q = poin| |00004a40| 74 65 72 20 74 6f 20 70 | 6f 69 6e 74 65 72 20 74 |ter to p|ointer t| |00004a50| 6f 20 54 53 75 62 6a 65 | 63 74 20 72 65 63 6f 72 |o TSubje|ct recor| |00004a60| 64 2e 0d 09 09 09 0d 09 | 45 78 69 74 3a 09 66 75 |d.......|Exit:.fu| |00004a70| 6e 63 74 69 6f 6e 20 72 | 65 73 75 6c 74 20 3d 20 |nction r|esult = | |00004a80| 65 72 72 6f 72 20 63 6f | 64 65 2e 0d 09 09 09 2a |error co|de.....*| |00004a90| 72 65 73 75 6c 74 0d 09 | 09 09 09 3c 20 30 20 69 |result..|...< 0 i| |00004aa0| 66 20 66 69 72 73 74 20 | 61 72 74 69 63 6c 65 20 |f first |article | |00004ab0| 6e 75 6d 62 65 72 20 3c | 20 73 65 63 6f 6e 64 20 |number <| second | |00004ac0| 61 72 74 69 63 6c 65 20 | 6e 75 6d 62 65 72 2e 0d |article |number..| |00004ad0| 09 09 09 09 3e 20 30 20 | 69 66 20 66 69 72 73 74 |....> 0 |if first| |00004ae0| 20 61 72 74 69 63 6c 65 | 20 6e 75 6d 62 65 72 20 | article| number | |00004af0| 3e 20 73 65 63 6f 6e 64 | 20 61 72 74 69 63 6c 65 |> second| article| |00004b00| 20 6e 75 6d 62 65 72 2e | 0d 2d 2d 2d 2d 2d 2d 2d | number.|.-------| |00004b10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004b20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004b30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004b40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004b50| 2d 2d 2d 2d 2d 2a 2f 0d | 0d 73 74 61 74 69 63 20 |-----*/.|.static | |00004b60| 4f 53 45 72 72 20 53 6f | 72 74 53 75 62 6a 65 63 |OSErr So|rtSubjec| |00004b70| 74 41 72 72 61 79 43 6f | 6d 70 61 72 65 33 20 28 |tArrayCo|mpare3 (| |00004b80| 54 53 75 62 6a 65 63 74 | 20 2a 2a 70 2c 20 54 53 |TSubject| **p, TS| |00004b90| 75 62 6a 65 63 74 20 2a | 2a 71 2c 20 73 68 6f 72 |ubject *|*q, shor| |00004ba0| 74 20 2a 72 65 73 75 6c | 74 29 0d 7b 0d 09 4f 53 |t *resul|t).{..OS| |00004bb0| 45 72 72 20 65 72 72 3b | 0d 09 73 74 61 74 69 63 |Err err;|..static| |00004bc0| 20 73 68 6f 72 74 20 63 | 6f 75 6e 74 65 72 20 3d | short c|ounter =| |00004bd0| 20 30 3b 0d 0d 09 69 66 | 20 28 28 2b 2b 63 6f 75 | 0;...if| ((++cou| |00004be0| 6e 74 65 72 20 26 20 30 | 78 31 66 29 20 3d 3d 20 |nter & 0|x1f) == | |00004bf0| 30 29 20 7b 0d 09 09 65 | 72 72 20 3d 20 47 69 76 |0) {...e|rr = Giv| |00004c00| 65 54 69 6d 65 28 66 61 | 6c 73 65 29 3b 0d 09 09 |eTime(fa|lse);...| |00004c10| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr| |00004c20| 29 20 72 65 74 75 72 6e | 20 65 72 72 3b 0d 09 09 |) return| err;...| |00004c30| 63 6f 75 6e 74 65 72 20 | 3d 20 30 3b 0d 09 7d 0d |counter |= 0;..}.| |00004c40| 09 0d 09 2a 72 65 73 75 | 6c 74 20 3d 20 28 2a 2a |...*resu|lt = (**| |00004c50| 70 29 2e 6e 75 6d 62 65 | 72 20 3c 20 28 2a 2a 71 |p).numbe|r < (**q| |00004c60| 29 2e 6e 75 6d 62 65 72 | 20 3f 20 2d 31 20 3a 20 |).number| ? -1 : | |00004c70| 2b 31 3b 0d 09 72 65 74 | 75 72 6e 20 6e 6f 45 72 |+1;..ret|urn noEr| |00004c80| 72 3b 0d 7d 0d 0d 0d 0d | 2f 2a 2d 2d 2d 2d 2d 2d |r;.}....|/*------| |00004c90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004ca0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004cb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004cc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004cd0| 2d 2d 2d 2d 2d 2d 0d 09 | 42 75 69 6c 64 53 6f 72 |------..|BuildSor| |00004ce0| 74 42 79 4e 75 6d 62 65 | 72 41 72 72 61 79 20 0d |tByNumbe|rArray .| |00004cf0| 09 0d 09 42 75 69 6c 64 | 20 74 68 65 20 53 6f 72 |...Build| the Sor| |00004d00| 74 42 79 4e 75 6d 62 65 | 72 20 61 72 72 61 79 20 |tByNumbe|r array | |00004d10| 66 6f 72 20 74 68 65 20 | 73 75 62 6a 65 63 74 20 |for the |subject | |00004d20| 77 69 6e 64 6f 77 2e 0d | 09 0d 09 45 6e 74 72 79 |window..|...Entry| |00004d30| 3a 09 77 69 6e 64 20 3d | 20 70 6f 69 6e 74 65 72 |:.wind =| pointer| |00004d40| 20 74 6f 20 77 69 6e 64 | 6f 77 20 72 65 63 6f 72 | to wind|ow recor| |00004d50| 64 2e 0d 09 09 09 0d 09 | 45 78 69 74 3a 09 66 75 |d.......|Exit:.fu| |00004d60| 6e 63 74 69 6f 6e 20 72 | 65 73 75 6c 74 20 3d 20 |nction r|esult = | |00004d70| 65 72 72 6f 72 20 63 6f | 64 65 2e 0d 09 09 09 28 |error co|de.....(| |00004d80| 2a 2a 69 6e 66 6f 29 2e | 73 6f 72 74 42 79 4e 75 |**info).|sortByNu| |00004d90| 6d 62 65 72 20 3d 20 68 | 61 6e 64 6c 65 20 74 6f |mber = h|andle to| |00004da0| 20 61 72 72 61 79 20 6f | 66 20 6f 66 66 73 65 74 | array o|f offset| |00004db0| 73 20 74 6f 20 65 6c 65 | 6d 65 6e 74 73 20 6f 66 |s to ele|ments of| |00004dc0| 0d 09 09 09 09 73 75 62 | 6a 65 63 74 20 61 72 72 |.....sub|ject arr| |00004dd0| 61 79 20 77 68 69 63 68 | 20 61 72 65 20 69 6e 20 |ay which| are in | |00004de0| 74 68 65 20 6c 69 73 74 | 2c 20 73 6f 72 74 65 64 |the list|, sorted| |00004df0| 20 62 79 20 61 72 74 69 | 63 6c 65 0d 09 09 09 09 | by arti|cle.....| |00004e00| 6e 75 6d 62 65 72 2e 20 | 0d 2d 2d 2d 2d 2d 2d 2d |number. |.-------| |00004e10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004e20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004e30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004e40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00004e50| 2d 2d 2d 2d 2d 2a 2f 0d | 0d 73 74 61 74 69 63 20 |-----*/.|.static | |00004e60| 4f 53 45 72 72 20 42 75 | 69 6c 64 53 6f 72 74 42 |OSErr Bu|ildSortB| |00004e70| 79 4e 75 6d 62 65 72 41 | 72 72 61 79 20 28 57 69 |yNumberA|rray (Wi| |00004e80| 6e 64 6f 77 50 74 72 20 | 77 69 6e 64 29 0d 7b 0d |ndowPtr |wind).{.| |00004e90| 09 54 57 69 6e 64 6f 77 | 20 2a 2a 69 6e 66 6f 3b |.TWindow| **info;| |00004ea0| 0d 09 54 53 75 62 6a 65 | 63 74 20 2a 2a 73 75 62 |..TSubje|ct **sub| |00004eb0| 6a 65 63 74 41 72 72 61 | 79 3b 0d 09 73 68 6f 72 |jectArra|y;..shor| |00004ec0| 74 20 6e 75 6d 53 75 62 | 6a 65 63 74 73 2c 20 6e |t numSub|jects, n| |00004ed0| 75 6d 53 75 62 6a 65 63 | 74 73 49 6e 4c 69 73 74 |umSubjec|tsInList| |00004ee0| 3b 0d 09 6c 6f 6e 67 20 | 2a 2a 73 6f 72 74 42 79 |;..long |**sortBy| |00004ef0| 4e 75 6d 62 65 72 20 3d | 20 6e 69 6c 3b 0d 09 4f |Number =| nil;..O| |00004f00| 53 45 72 72 20 65 72 72 | 20 3d 20 6e 6f 45 72 72 |SErr err| = noErr| |00004f10| 3b 0d 09 73 68 6f 72 74 | 20 69 3b 0d 09 54 53 75 |;..short| i;..TSu| |00004f20| 62 6a 65 63 74 20 2a 70 | 3b 0d 09 6c 6f 6e 67 20 |bject *p|;..long | |00004f30| 2a 71 3b 0d 09 63 68 61 | 72 20 73 74 61 74 65 3b |*q;..cha|r state;| |00004f40| 0d 09 0d 09 69 6e 66 6f | 20 3d 20 28 54 57 69 6e |....info| = (TWin| |00004f50| 64 6f 77 2a 2a 29 47 65 | 74 57 52 65 66 43 6f 6e |dow**)Ge|tWRefCon| |00004f60| 28 77 69 6e 64 29 3b 0d | 09 73 75 62 6a 65 63 74 |(wind);.|.subject| |00004f70| 41 72 72 61 79 20 3d 20 | 28 2a 2a 69 6e 66 6f 29 |Array = |(**info)| |00004f80| 2e 73 75 62 6a 65 63 74 | 41 72 72 61 79 3b 0d 09 |.subject|Array;..| |00004f90| 73 74 61 74 65 20 3d 20 | 4d 79 48 47 65 74 53 74 |state = |MyHGetSt| |00004fa0| 61 74 65 28 73 75 62 6a | 65 63 74 41 72 72 61 79 |ate(subj|ectArray| |00004fb0| 29 3b 0d 09 6e 75 6d 53 | 75 62 6a 65 63 74 73 20 |);..numS|ubjects | |00004fc0| 3d 20 28 2a 2a 69 6e 66 | 6f 29 2e 6e 75 6d 53 75 |= (**inf|o).numSu| |00004fd0| 62 6a 65 63 74 73 3b 0d | 09 6e 75 6d 53 75 62 6a |bjects;.|.numSubj| |00004fe0| 65 63 74 73 49 6e 4c 69 | 73 74 20 3d 20 28 2a 2a |ectsInLi|st = (**| |00004ff0| 69 6e 66 6f 29 2e 6e 75 | 6d 53 75 62 6a 65 63 74 |info).nu|mSubject| |00005000| 73 49 6e 4c 69 73 74 3b | 0d 09 0d 09 2f 2a 20 41 |sInList;|..../* A| |00005010| 6c 6c 6f 63 61 74 65 20 | 74 68 65 20 61 72 72 61 |llocate |the arra| |00005020| 79 2e 20 2a 2f 0d 09 0d | 09 65 72 72 20 3d 20 4d |y. */...|.err = M| |00005030| 79 4e 65 77 48 61 6e 64 | 6c 65 28 6e 75 6d 53 75 |yNewHand|le(numSu| |00005040| 62 6a 65 63 74 73 49 6e | 4c 69 73 74 2a 73 69 7a |bjectsIn|List*siz| |00005050| 65 6f 66 28 6c 6f 6e 67 | 29 2c 20 26 73 6f 72 74 |eof(long|), &sort| |00005060| 42 79 4e 75 6d 62 65 72 | 29 3b 0d 09 69 66 20 28 |ByNumber|);..if (| |00005070| 65 72 72 20 21 3d 20 6e | 6f 45 72 72 29 20 67 6f |err != n|oErr) go| |00005080| 74 6f 20 65 78 69 74 3b | 0d 09 0d 09 2f 2a 20 49 |to exit;|..../* I| |00005090| 6e 69 74 69 61 6c 69 7a | 65 20 74 68 65 20 61 72 |nitializ|e the ar| |000050a0| 72 61 79 2e 20 44 75 72 | 69 6e 67 20 74 68 65 20 |ray. Dur|ing the | |000050b0| 73 6f 72 74 2c 20 74 68 | 65 20 61 72 72 61 79 20 |sort, th|e array | |000050c0| 65 6c 65 6d 65 6e 74 73 | 20 61 72 65 20 70 6f 69 |elements| are poi| |000050d0| 6e 74 65 72 73 0d 09 20 | 20 20 69 6e 74 6f 20 74 |nters.. | into t| |000050e0| 68 65 20 6c 6f 63 6b 65 | 64 20 73 75 62 6a 65 63 |he locke|d subjec| |000050f0| 74 20 61 72 72 61 79 2c | 20 72 61 74 68 65 72 20 |t array,| rather | |00005100| 74 68 61 6e 20 6f 66 66 | 73 65 74 73 2e 20 2a 2f |than off|sets. */| |00005110| 0d 09 0d 09 4d 79 48 4c | 6f 63 6b 28 73 6f 72 74 |....MyHL|ock(sort| |00005120| 42 79 4e 75 6d 62 65 72 | 29 3b 0d 09 4d 79 48 4c |ByNumber|);..MyHL| |00005130| 6f 63 6b 28 73 75 62 6a | 65 63 74 41 72 72 61 79 |ock(subj|ectArray| |00005140| 29 3b 0d 0d 09 66 6f 72 | 20 28 69 20 3d 20 30 2c |);...for| (i = 0,| |00005150| 20 70 20 3d 20 2a 73 75 | 62 6a 65 63 74 41 72 72 | p = *su|bjectArr| |00005160| 61 79 2c 20 71 20 3d 20 | 2a 73 6f 72 74 42 79 4e |ay, q = |*sortByN| |00005170| 75 6d 62 65 72 3b 0d 09 | 09 69 20 3c 20 6e 75 6d |umber;..|.i < num| |00005180| 53 75 62 6a 65 63 74 73 | 3b 0d 09 09 69 2b 2b 2c |Subjects|;...i++,| |00005190| 20 70 2b 2b 29 0d 09 7b | 0d 09 09 69 66 20 28 70 | p++)..{|...if (p| |000051a0| 2d 3e 69 6e 4c 69 73 74 | 29 20 2a 71 2b 2b 20 3d |->inList|) *q++ =| |000051b0| 20 28 6c 6f 6e 67 29 70 | 3b 0d 09 7d 0d 09 0d 09 | (long)p|;..}....| |000051c0| 2f 2a 20 53 6f 72 74 20 | 74 68 65 20 61 72 72 61 |/* Sort |the arra| |000051d0| 79 20 69 6e 74 6f 20 69 | 6e 63 72 65 61 73 69 6e |y into i|ncreasin| |000051e0| 67 20 6f 72 64 65 72 20 | 62 79 20 61 72 74 69 63 |g order |by artic| |000051f0| 6c 65 20 6e 75 6d 62 65 | 72 2e 20 2a 2f 0d 0d 09 |le numbe|r. */...| |00005200| 65 72 72 20 3d 20 46 61 | 73 74 51 53 6f 72 74 28 |err = Fa|stQSort(| |00005210| 2a 73 6f 72 74 42 79 4e | 75 6d 62 65 72 2c 20 6e |*sortByN|umber, n| |00005220| 75 6d 53 75 62 6a 65 63 | 74 73 49 6e 4c 69 73 74 |umSubjec|tsInList| |00005230| 2c 20 73 69 7a 65 6f 66 | 28 6c 6f 6e 67 29 2c 0d |, sizeof|(long),.| |00005240| 09 09 28 53 6f 72 74 43 | 6d 70 46 75 6e 63 74 69 |..(SortC|mpFuncti| |00005250| 6f 6e 29 53 6f 72 74 53 | 75 62 6a 65 63 74 41 72 |on)SortS|ubjectAr| |00005260| 72 61 79 43 6f 6d 70 61 | 72 65 33 29 3b 0d 09 69 |rayCompa|re3);..i| |00005270| 66 20 28 65 72 72 20 21 | 3d 20 6e 6f 45 72 72 29 |f (err !|= noErr)| |00005280| 20 67 6f 74 6f 20 65 78 | 69 74 3b 0d 09 0d 09 2f | goto ex|it;..../| |00005290| 2a 20 43 6f 6e 76 65 72 | 74 20 74 68 65 20 61 72 |* Conver|t the ar| |000052a0| 72 61 79 20 66 72 6f 6d | 20 70 6f 69 6e 74 65 72 |ray from| pointer| |000052b0| 73 20 74 6f 20 6f 66 66 | 73 65 74 73 2e 20 2a 2f |s to off|sets. */| |000052c0| 0d 09 0d 09 66 6f 72 20 | 28 69 20 3d 20 30 2c 20 |....for |(i = 0, | |000052d0| 71 20 3d 20 2a 73 6f 72 | 74 42 79 4e 75 6d 62 65 |q = *sor|tByNumbe| |000052e0| 72 3b 20 69 20 3c 20 6e | 75 6d 53 75 62 6a 65 63 |r; i < n|umSubjec| |000052f0| 74 73 49 6e 4c 69 73 74 | 3b 20 69 2b 2b 2c 20 71 |tsInList|; i++, q| |00005300| 2b 2b 29 0d 09 09 2a 71 | 20 3d 20 28 63 68 61 72 |++)...*q| = (char| |00005310| 2a 29 2a 71 20 2d 20 28 | 63 68 61 72 2a 29 2a 73 |*)*q - (|char*)*s| |00005320| 75 62 6a 65 63 74 41 72 | 72 61 79 3b 0d 09 0d 09 |ubjectAr|ray;....| |00005330| 4d 79 48 55 6e 6c 6f 63 | 6b 28 73 6f 72 74 42 79 |MyHUnloc|k(sortBy| |00005340| 4e 75 6d 62 65 72 29 3b | 0d 09 4d 79 48 53 65 74 |Number);|..MyHSet| |00005350| 53 74 61 74 65 28 73 75 | 62 6a 65 63 74 41 72 72 |State(su|bjectArr| |00005360| 61 79 2c 20 73 74 61 74 | 65 29 3b 0d 09 09 0d 09 |ay, stat|e);.....| |00005370| 28 2a 2a 69 6e 66 6f 29 | 2e 73 6f 72 74 42 79 4e |(**info)|.sortByN| |00005380| 75 6d 62 65 72 20 3d 20 | 73 6f 72 74 42 79 4e 75 |umber = |sortByNu| |00005390| 6d 62 65 72 3b 0d 09 72 | 65 74 75 72 6e 20 6e 6f |mber;..r|eturn no| |000053a0| 45 72 72 3b 0d 09 0d 65 | 78 69 74 3a 0d 0d 09 4d |Err;...e|xit:...M| |000053b0| 79 44 69 73 70 6f 73 65 | 48 61 6e 64 6c 65 28 73 |yDispose|Handle(s| |000053c0| 6f 72 74 42 79 4e 75 6d | 62 65 72 29 3b 0d 09 4d |ortByNum|ber);..M| |000053d0| 79 48 53 65 74 53 74 61 | 74 65 28 73 75 62 6a 65 |yHSetSta|te(subje| |000053e0| 63 74 41 72 72 61 79 2c | 20 73 74 61 74 65 29 3b |ctArray,| state);| |000053f0| 0d 09 72 65 74 75 72 6e | 20 65 72 72 3b 0d 7d 0d |..return| err;.}.| |00005400| 0d 0d 0d 2f 2a 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.../*---|--------| |00005410| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00005420| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00005430| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00005440| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00005450| 2d 0d 09 42 75 69 6c 64 | 54 68 72 65 61 64 73 20 |-..Build|Threads | |00005460| 0d 09 0d 09 42 75 69 6c | 64 20 73 75 62 6a 65 63 |....Buil|d subjec| |00005470| 74 20 77 69 6e 64 6f 77 | 20 74 68 72 65 61 64 73 |t window| threads| |00005480| 2e 0d 09 0d 09 45 6e 74 | 72 79 3a 09 77 69 6e 64 |.....Ent|ry:.wind| |00005490| 20 3d 20 70 6f 69 6e 74 | 65 72 20 74 6f 20 73 75 | = point|er to su| |000054a0| 62 6a 65 63 74 20 77 69 | 6e 64 6f 77 2e 0d 09 0d |bject wi|ndow....| |000054b0| 09 45 78 69 74 3a 09 66 | 75 6e 63 74 69 6f 6e 20 |.Exit:.f|unction | |000054c0| 72 65 73 75 6c 74 20 3d | 20 65 72 72 6f 72 20 63 |result =| error c| |000054d0| 6f 64 65 2e 0d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |ode..---|--------| |000054e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |000054f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00005500| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00005510| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------| |00005520| 2d 2a 2f 0d 0d 4f 53 45 | 72 72 20 42 75 69 6c 64 |-*/..OSE|rr Build| |00005530| 54 68 72 65 61 64 73 20 | 28 57 69 6e 64 6f 77 50 |Threads |(WindowP| |00005540| 74 72 20 77 69 6e 64 29 | 0d 7b 0d 09 54 57 69 6e |tr wind)|.{..TWin| |00005550| 64 6f 77 20 2a 2a 69 6e | 66 6f 2c 20 2a 2a 70 61 |dow **in|fo, **pa| |00005560| 72 65 6e 74 49 6e 66 6f | 3b 0d 09 57 69 6e 64 6f |rentInfo|;..Windo| |00005570| 77 50 74 72 20 70 61 72 | 65 6e 74 3b 0d 09 54 53 |wPtr par|ent;..TS| |00005580| 75 62 6a 65 63 74 20 2a | 2a 73 75 62 6a 65 63 74 |ubject *|*subject| |00005590| 41 72 72 61 79 3b 0d 09 | 73 68 6f 72 74 20 6e 75 |Array;..|short nu| |000055a0| 6d 53 75 62 6a 65 63 74 | 73 2c 20 6e 75 6d 53 75 |mSubject|s, numSu| |000055b0| 62 6a 65 63 74 73 49 6e | 4c 69 73 74 3b 0d 09 4c |bjectsIn|List;..L| |000055c0| 69 73 74 48 61 6e 64 6c | 65 20 74 68 65 4c 69 73 |istHandl|e theLis| |000055d0| 74 3b 0d 09 54 53 6f 72 | 74 49 6e 66 6f 48 61 6e |t;..TSor|tInfoHan| |000055e0| 64 6c 65 20 73 6f 72 74 | 49 6e 66 6f 20 3d 20 6e |dle sort|Info = n| |000055f0| 69 6c 3b 0d 09 54 53 6f | 72 74 49 6e 66 6f 50 74 |il;..TSo|rtInfoPt| |00005600| 72 20 2a 2a 73 6f 72 74 | 49 6e 66 6f 50 74 72 73 |r **sort|InfoPtrs| |00005610| 20 3d 20 6e 69 6c 3b 0d | 09 48 61 6e 64 6c 65 20 | = nil;.|.Handle | |00005620| 63 61 6e 6f 6e 69 63 61 | 6c 53 74 72 69 6e 67 73 |canonica|lStrings| |00005630| 20 3d 20 6e 69 6c 3b 0d | 09 54 53 75 62 6a 65 63 | = nil;.|.TSubjec| |00005640| 74 20 2a 71 3b 0d 09 54 | 53 6f 72 74 49 6e 66 6f |t *q;..T|SortInfo| |00005650| 50 74 72 20 2a 72 3b 0d | 09 73 68 6f 72 74 20 2a |Ptr *r;.|.short *| |00005660| 70 43 65 6c 6c 73 3b 0d | 09 73 68 6f 72 74 20 2a |pCells;.|.short *| |00005670| 70 43 65 6c 6c 41 72 72 | 61 79 3b 0d 09 73 68 6f |pCellArr|ay;..sho| |00005680| 72 74 20 6f 66 66 73 65 | 74 3b 0d 09 73 68 6f 72 |rt offse|t;..shor| |00005690| 74 20 6e 75 6d 43 65 6c | 6c 73 3b 0d 09 73 68 6f |t numCel|ls;..sho| |000056a0| 72 74 20 69 3b 0d 09 4f | 53 45 72 72 20 65 72 72 |rt i;..O|SErr err| |000056b0| 20 3d 20 6e 6f 45 72 72 | 3b 0d 09 63 68 61 72 20 | = noErr|;..char | |000056c0| 73 74 61 74 65 3b 0d 09 | 0d 09 2f 2a 20 49 6e 69 |state;..|../* Ini| |000056d0| 74 69 61 6c 69 7a 65 2e | 20 2a 2f 0d 09 0d 09 69 |tialize.| */....i| |000056e0| 6e 66 6f 20 3d 20 28 54 | 57 69 6e 64 6f 77 2a 2a |nfo = (T|Window**| |000056f0| 29 47 65 74 57 52 65 66 | 43 6f 6e 28 77 69 6e 64 |)GetWRef|Con(wind| |00005700| 29 3b 0d 09 73 75 62 6a | 65 63 74 41 72 72 61 79 |);..subj|ectArray| |00005710| 20 3d 20 28 2a 2a 69 6e | 66 6f 29 2e 73 75 62 6a | = (**in|fo).subj| |00005720| 65 63 74 41 72 72 61 79 | 3b 0d 09 73 74 61 74 65 |ectArray|;..state| |00005730| 20 3d 20 4d 79 48 47 65 | 74 53 74 61 74 65 28 73 | = MyHGe|tState(s| |00005740| 75 62 6a 65 63 74 41 72 | 72 61 79 29 3b 0d 09 67 |ubjectAr|ray);..g| |00005750| 53 74 72 69 6e 67 73 20 | 3d 20 28 2a 2a 69 6e 66 |Strings |= (**inf| |00005760| 6f 29 2e 73 74 72 69 6e | 67 73 3b 0d 09 74 68 65 |o).strin|gs;..the| |00005770| 4c 69 73 74 20 3d 20 28 | 2a 2a 69 6e 66 6f 29 2e |List = (|**info).| |00005780| 74 68 65 4c 69 73 74 3b | 0d 09 73 74 72 63 70 79 |theList;|..strcpy| |00005790| 28 67 47 72 6f 75 70 4e | 61 6d 65 2c 20 2a 67 47 |(gGroupN|ame, *gG| |000057a0| 72 6f 75 70 4e 61 6d 65 | 73 20 2b 20 28 2a 2a 69 |roupName|s + (**i| |000057b0| 6e 66 6f 29 2e 67 72 6f | 75 70 4e 61 6d 65 4f 66 |nfo).gro|upNameOf| |000057c0| 66 73 65 74 29 3b 0d 09 | 70 61 72 65 6e 74 20 3d |fset);..|parent =| |000057d0| 20 28 2a 2a 69 6e 66 6f | 29 2e 70 61 72 65 6e 74 | (**info|).parent| |000057e0| 57 69 6e 64 6f 77 3b 0d | 09 69 66 20 28 70 61 72 |Window;.|.if (par| |000057f0| 65 6e 74 20 3d 3d 20 6e | 69 6c 29 20 7b 0d 09 09 |ent == n|il) {...| |00005800| 67 50 61 72 65 6e 74 49 | 73 55 73 65 72 47 72 6f |gParentI|sUserGro| |00005810| 75 70 4c 69 73 74 20 3d | 20 66 61 6c 73 65 3b 0d |upList =| false;.| |00005820| 09 7d 20 65 6c 73 65 20 | 7b 0d 09 09 70 61 72 65 |.} else |{...pare| |00005830| 6e 74 49 6e 66 6f 20 3d | 20 28 54 57 69 6e 64 6f |ntInfo =| (TWindo| |00005840| 77 2a 2a 29 47 65 74 57 | 52 65 66 43 6f 6e 28 70 |w**)GetW|RefCon(p| |00005850| 61 72 65 6e 74 29 3b 0d | 09 09 67 50 61 72 65 6e |arent);.|..gParen| |00005860| 74 49 73 55 73 65 72 47 | 72 6f 75 70 4c 69 73 74 |tIsUserG|roupList| |00005870| 20 3d 20 28 2a 2a 70 61 | 72 65 6e 74 49 6e 66 6f | = (**pa|rentInfo| |00005880| 29 2e 67 72 6f 75 70 4b | 69 6e 64 20 3d 3d 20 6b |).groupK|ind == k| |00005890| 55 73 65 72 47 72 6f 75 | 70 3b 0d 09 7d 0d 09 0d |UserGrou|p;..}...| |000058a0| 09 2f 2a 20 41 70 70 65 | 6e 64 20 63 61 63 68 65 |./* Appe|nd cache| |000058b0| 64 20 61 72 74 69 63 6c | 65 73 20 74 6f 20 73 75 |d articl|es to su| |000058c0| 62 6a 65 63 74 20 61 72 | 72 61 79 2e 20 2a 2f 0d |bject ar|ray. */.| |000058d0| 09 0d 09 69 66 20 28 67 | 50 61 72 65 6e 74 49 73 |...if (g|ParentIs| |000058e0| 55 73 65 72 47 72 6f 75 | 70 4c 69 73 74 29 20 7b |UserGrou|pList) {| |000058f0| 0d 09 09 65 72 72 20 3d | 20 41 70 70 65 6e 64 43 |...err =| AppendC| |00005900| 61 63 68 65 64 41 72 74 | 69 63 6c 65 73 28 77 69 |achedArt|icles(wi| |00005910| 6e 64 29 3b 0d 09 09 69 | 66 20 28 65 72 72 20 21 |nd);...i|f (err !| |00005920| 3d 20 6e 6f 45 72 72 29 | 20 67 6f 74 6f 20 65 78 |= noErr)| goto ex| |00005930| 69 74 3b 0d 09 7d 0d 09 | 6e 75 6d 53 75 62 6a 65 |it;..}..|numSubje| |00005940| 63 74 73 20 3d 20 28 2a | 2a 69 6e 66 6f 29 2e 6e |cts = (*|*info).n| |00005950| 75 6d 53 75 62 6a 65 63 | 74 73 3b 0d 0d 09 2f 2a |umSubjec|ts;.../*| |00005960| 20 49 6e 69 74 69 61 6c | 69 7a 65 20 74 68 65 20 | Initial|ize the | |00005970| 73 6f 72 74 20 69 6e 66 | 6f 20 64 61 74 61 20 73 |sort inf|o data s| |00005980| 74 72 75 63 74 75 72 65 | 73 2e 20 2a 2f 0d 0d 09 |tructure|s. */...| |00005990| 65 72 72 20 3d 20 49 6e | 69 74 53 6f 72 74 49 6e |err = In|itSortIn| |000059a0| 66 6f 28 73 75 62 6a 65 | 63 74 41 72 72 61 79 2c |fo(subje|ctArray,| |000059b0| 20 6e 75 6d 53 75 62 6a | 65 63 74 73 2c 20 67 53 | numSubj|ects, gS| |000059c0| 74 72 69 6e 67 73 2c 0d | 09 09 26 73 6f 72 74 49 |trings,.|..&sortI| |000059d0| 6e 66 6f 2c 20 26 63 61 | 6e 6f 6e 69 63 61 6c 53 |nfo, &ca|nonicalS| |000059e0| 74 72 69 6e 67 73 2c 20 | 26 73 6f 72 74 49 6e 66 |trings, |&sortInf| |000059f0| 6f 50 74 72 73 29 3b 0d | 09 69 66 20 28 65 72 72 |oPtrs);.|.if (err| |00005a00| 20 21 3d 20 6e 6f 45 72 | 72 29 20 67 6f 74 6f 20 | != noEr|r) goto | |00005a10| 65 78 69 74 3b 0d 0d 09 | 2f 2a 20 53 6f 72 74 20 |exit;...|/* Sort | |00005a20| 74 68 65 20 73 6f 72 74 | 49 6e 66 6f 50 74 72 73 |the sort|InfoPtrs| |00005a30| 20 61 72 72 61 79 20 69 | 6e 74 6f 20 74 68 72 65 | array i|nto thre| |00005a40| 61 64 20 6f 72 64 65 72 | 2e 20 2a 2f 0d 09 0d 09 |ad order|. */....| |00005a50| 65 72 72 20 3d 20 53 6f | 72 74 41 72 72 61 79 28 |err = So|rtArray(| |00005a60| 2a 73 6f 72 74 49 6e 66 | 6f 50 74 72 73 2c 20 6e |*sortInf|oPtrs, n| |00005a70| 75 6d 53 75 62 6a 65 63 | 74 73 29 3b 0d 09 69 66 |umSubjec|ts);..if| |00005a80| 20 28 65 72 72 20 21 3d | 20 6e 6f 45 72 72 29 20 | (err !=| noErr) | |00005a90| 67 6f 74 6f 20 65 78 69 | 74 3b 0d 09 0d 09 2f 2a |goto exi|t;..../*| |00005aa0| 20 57 65 20 63 61 6e 20 | 61 6e 64 20 73 68 6f 75 | We can |and shou| |00005ab0| 6c 64 20 67 65 74 20 72 | 69 64 20 6f 66 20 74 68 |ld get r|id of th| |00005ac0| 65 20 63 61 6e 6f 6e 69 | 63 61 6c 53 74 72 69 6e |e canoni|calStrin| |00005ad0| 67 73 20 6d 65 6d 6f 72 | 79 20 62 6c 6f 63 6b 20 |gs memor|y block | |00005ae0| 61 74 20 74 68 69 73 20 | 70 6f 69 6e 74 2e 20 2a |at this |point. *| |00005af0| 2f 0d 09 0d 09 4d 79 44 | 69 73 70 6f 73 65 48 61 |/....MyD|isposeHa| |00005b00| 6e 64 6c 65 28 63 61 6e | 6f 6e 69 63 61 6c 53 74 |ndle(can|onicalSt| |00005b10| 72 69 6e 67 73 29 3b 0d | 09 63 61 6e 6f 6e 69 63 |rings);.|.canonic| |00005b20| 61 6c 53 74 72 69 6e 67 | 73 20 3d 20 6e 69 6c 3b |alString|s = nil;| |00005b30| 0d 09 0d 09 2f 2a 20 53 | 70 6c 69 74 20 70 61 72 |..../* S|plit par| |00005b40| 74 20 74 68 72 65 61 64 | 73 2e 20 2a 2f 0d 09 0d |t thread|s. */...| |00005b50| 09 53 70 6c 69 74 50 61 | 72 74 54 68 72 65 61 64 |.SplitPa|rtThread| |00005b60| 73 28 2a 73 75 62 6a 65 | 63 74 41 72 72 61 79 2c |s(*subje|ctArray,| |00005b70| 20 6e 75 6d 53 75 62 6a | 65 63 74 73 29 3b 0d 09 | numSubj|ects);..| |00005b80| 0d 09 2f 2a 20 43 6f 6d | 70 75 74 65 20 74 68 65 |../* Com|pute the| |00005b90| 20 6e 75 6d 62 65 72 20 | 6f 66 20 73 75 62 6a 65 | number |of subje| |00005ba0| 63 74 73 20 69 6e 20 74 | 68 65 20 6c 69 73 74 20 |cts in t|he list | |00005bb0| 61 6e 64 20 74 68 65 20 | 6e 75 6d 62 65 72 0d 09 |and the |number..| |00005bc0| 20 20 20 6f 66 20 63 65 | 6c 6c 73 20 69 6e 20 74 | of ce|lls in t| |00005bd0| 68 65 20 6c 69 73 74 2e | 20 2a 2f 0d 09 0d 09 6e |he list.| */....n| |00005be0| 75 6d 53 75 62 6a 65 63 | 74 73 49 6e 4c 69 73 74 |umSubjec|tsInList| |00005bf0| 20 3d 20 6e 75 6d 53 75 | 62 6a 65 63 74 73 3b 0d | = numSu|bjects;.| |00005c00| 09 6e 75 6d 43 65 6c 6c | 73 20 3d 20 6e 75 6d 53 |.numCell|s = numS| |00005c10| 75 62 6a 65 63 74 73 3b | 0d 09 66 6f 72 20 28 69 |ubjects;|..for (i| |00005c20| 20 3d 20 30 2c 20 71 20 | 3d 20 2a 73 75 62 6a 65 | = 0, q |= *subje| |00005c30| 63 74 41 72 72 61 79 3b | 20 69 20 3c 20 6e 75 6d |ctArray;| i < num| |00005c40| 53 75 62 6a 65 63 74 73 | 3b 20 69 2b 2b 2c 20 71 |Subjects|; i++, q| |00005c50| 2b 2b 29 20 7b 0d 09 09 | 69 66 20 28 21 71 2d 3e |++) {...|if (!q->| |00005c60| 69 6e 4c 69 73 74 29 20 | 7b 0d 09 09 09 6e 75 6d |inList) |{....num| |00005c70| 53 75 62 6a 65 63 74 73 | 49 6e 4c 69 73 74 2d 2d |Subjects|InList--| |00005c80| 3b 0d 09 09 09 6e 75 6d | 43 65 6c 6c 73 2d 2d 3b |;....num|Cells--;| |00005c90| 0d 09 09 7d 20 65 6c 73 | 65 20 69 66 20 28 71 2d |...} els|e if (q-| |00005ca0| 3e 63 6f 6c 6c 61 70 73 | 65 64 20 26 26 20 71 2d |>collaps|ed && q-| |00005cb0| 3e 74 68 72 65 61 64 4f | 72 64 69 6e 61 6c 20 21 |>threadO|rdinal !| |00005cc0| 3d 20 31 29 20 7b 0d 09 | 09 09 6e 75 6d 43 65 6c |= 1) {..|..numCel| |00005cd0| 6c 73 2d 2d 3b 0d 09 09 | 7d 0d 09 7d 0d 09 28 2a |ls--;...|}..}..(*| |00005ce0| 2a 69 6e 66 6f 29 2e 6e | 75 6d 53 75 62 6a 65 63 |*info).n|umSubjec| |00005cf0| 74 73 49 6e 4c 69 73 74 | 20 3d 20 6e 75 6d 53 75 |tsInList| = numSu| |00005d00| 62 6a 65 63 74 73 49 6e | 4c 69 73 74 3b 0d 0d 09 |bjectsIn|List;...| |00005d10| 2f 2a 20 43 72 65 61 74 | 65 20 74 68 65 20 4c 69 |/* Creat|e the Li| |00005d20| 73 74 20 4d 61 6e 61 67 | 65 72 20 63 65 6c 6c 20 |st Manag|er cell | |00005d30| 6c 69 73 74 2e 20 2a 2f | 0d 09 0d 09 4c 53 65 74 |list. */|....LSet| |00005d40| 44 72 61 77 69 6e 67 4d | 6f 64 65 28 66 61 6c 73 |DrawingM|ode(fals| |00005d50| 65 2c 20 74 68 65 4c 69 | 73 74 29 3b 0d 09 4c 41 |e, theLi|st);..LA| |00005d60| 64 64 52 6f 77 28 6e 75 | 6d 43 65 6c 6c 73 2c 20 |ddRow(nu|mCells, | |00005d70| 30 2c 20 74 68 65 4c 69 | 73 74 29 3b 0d 09 65 72 |0, theLi|st);..er| |00005d80| 72 20 3d 20 4d 79 53 65 | 74 48 61 6e 64 6c 65 53 |r = MySe|tHandleS| |00005d90| 69 7a 65 28 28 2a 2a 74 | 68 65 4c 69 73 74 29 2e |ize((**t|heList).| |00005da0| 63 65 6c 6c 73 2c 20 32 | 2a 6e 75 6d 43 65 6c 6c |cells, 2|*numCell| |00005db0| 73 29 3b 0d 09 69 66 20 | 28 65 72 72 20 21 3d 20 |s);..if |(err != | |00005dc0| 6e 6f 45 72 72 29 20 67 | 6f 74 6f 20 65 78 69 74 |noErr) g|oto exit| |00005dd0| 3b 0d 09 70 43 65 6c 6c | 73 20 3d 20 28 73 68 6f |;..pCell|s = (sho| |00005de0| 72 74 2a 29 2a 28 28 2a | 2a 74 68 65 4c 69 73 74 |rt*)*((*|*theList| |00005df0| 29 2e 63 65 6c 6c 73 29 | 3b 0d 09 70 43 65 6c 6c |).cells)|;..pCell| |00005e00| 41 72 72 61 79 20 3d 20 | 28 2a 2a 74 68 65 4c 69 |Array = |(**theLi| |00005e10| 73 74 29 2e 63 65 6c 6c | 41 72 72 61 79 3b 0d 09 |st).cell|Array;..| |00005e20| 6f 66 66 73 65 74 20 3d | 20 30 3b 0d 09 66 6f 72 |offset =| 0;..for| |00005e30| 20 28 69 20 3d 20 30 2c | 20 72 20 3d 20 2a 73 6f | (i = 0,| r = *so| |00005e40| 72 74 49 6e 66 6f 50 74 | 72 73 3b 20 69 20 3c 20 |rtInfoPt|rs; i < | |00005e50| 6e 75 6d 53 75 62 6a 65 | 63 74 73 3b 20 69 2b 2b |numSubje|cts; i++| |00005e60| 2c 20 72 2b 2b 29 20 7b | 0d 09 09 71 20 3d 20 28 |, r++) {|...q = (| |00005e70| 2a 2a 72 29 2e 73 75 62 | 6a 65 63 74 3b 0d 09 09 |**r).sub|ject;...| |00005e80| 69 66 20 28 71 2d 3e 69 | 6e 4c 69 73 74 29 20 7b |if (q->i|nList) {| |00005e90| 0d 09 09 09 69 66 20 28 | 21 71 2d 3e 63 6f 6c 6c |....if (|!q->coll| |00005ea0| 61 70 73 65 64 20 7c 7c | 20 71 2d 3e 74 68 72 65 |apsed ||| q->thre| |00005eb0| 61 64 4f 72 64 69 6e 61 | 6c 20 3d 3d 20 31 29 20 |adOrdina|l == 1) | |00005ec0| 7b 0d 09 09 09 09 2a 70 | 43 65 6c 6c 41 72 72 61 |{.....*p|CellArra| |00005ed0| 79 2b 2b 20 3d 20 6f 66 | 66 73 65 74 3b 0d 09 09 |y++ = of|fset;...| |00005ee0| 09 09 2a 70 43 65 6c 6c | 73 2b 2b 20 3d 20 28 2a |..*pCell|s++ = (*| |00005ef0| 72 29 2d 3e 69 6e 64 65 | 78 3b 0d 09 09 09 09 6f |r)->inde|x;.....o| |00005f00| 66 66 73 65 74 20 2b 3d | 20 32 3b 0d 09 09 09 7d |ffset +=| 2;....}| |00005f10| 0d 09 09 7d 0d 09 7d 0d | 09 2a 70 43 65 6c 6c 41 |...}..}.|.*pCellA| |00005f20| 72 72 61 79 20 3d 20 6f | 66 66 73 65 74 3b 0d 09 |rray = o|ffset;..| |00005f30| 4c 53 65 74 44 72 61 77 | 69 6e 67 4d 6f 64 65 28 |LSetDraw|ingMode(| |00005f40| 74 72 75 65 2c 20 74 68 | 65 4c 69 73 74 29 3b 0d |true, th|eList);.| |00005f50| 09 0d 09 2f 2a 20 44 69 | 73 70 6f 73 65 20 74 68 |.../* Di|spose th| |00005f60| 65 20 73 6f 72 74 49 6e | 66 6f 20 61 6e 64 20 73 |e sortIn|fo and s| |00005f70| 6f 72 74 49 6e 66 6f 50 | 74 72 73 20 6d 65 6d 6f |ortInfoP|trs memo| |00005f80| 72 79 20 62 6c 6f 63 6b | 73 2e 20 2a 2f 0d 09 09 |ry block|s. */...| |00005f90| 0d 09 4d 79 48 53 65 74 | 53 74 61 74 65 28 73 75 |..MyHSet|State(su| |00005fa0| 62 6a 65 63 74 41 72 72 | 61 79 2c 20 73 74 61 74 |bjectArr|ay, stat| |00005fb0| 65 29 3b 0d 09 4d 79 44 | 69 73 70 6f 73 65 48 61 |e);..MyD|isposeHa| |00005fc0| 6e 64 6c 65 28 73 6f 72 | 74 49 6e 66 6f 29 3b 0d |ndle(sor|tInfo);.| |00005fd0| 09 4d 79 44 69 73 70 6f | 73 65 48 61 6e 64 6c 65 |.MyDispo|seHandle| |00005fe0| 28 73 6f 72 74 49 6e 66 | 6f 50 74 72 73 29 3b 0d |(sortInf|oPtrs);.| |00005ff0| 09 0d 09 2f 2a 20 42 75 | 69 6c 64 20 74 68 65 20 |.../* Bu|ild the | |00006000| 73 6f 72 74 20 62 79 20 | 6e 75 6d 62 65 72 20 61 |sort by |number a| |00006010| 72 72 61 79 2e 20 2a 2f | 0d 09 0d 09 72 65 74 75 |rray. */|....retu| |00006020| 72 6e 20 42 75 69 6c 64 | 53 6f 72 74 42 79 4e 75 |rn Build|SortByNu| |00006030| 6d 62 65 72 41 72 72 61 | 79 28 77 69 6e 64 29 3b |mberArra|y(wind);| |00006040| 0d 09 0d 65 78 69 74 3a | 0d 0d 09 4d 79 48 53 65 |...exit:|...MyHSe| |00006050| 74 53 74 61 74 65 28 73 | 75 62 6a 65 63 74 41 72 |tState(s|ubjectAr| |00006060| 72 61 79 2c 20 73 74 61 | 74 65 29 3b 0d 09 4d 79 |ray, sta|te);..My| |00006070| 44 69 73 70 6f 73 65 48 | 61 6e 64 6c 65 28 73 6f |DisposeH|andle(so| |00006080| 72 74 49 6e 66 6f 29 3b | 0d 09 4d 79 44 69 73 70 |rtInfo);|..MyDisp| |00006090| 6f 73 65 48 61 6e 64 6c | 65 28 63 61 6e 6f 6e 69 |oseHandl|e(canoni| |000060a0| 63 61 6c 53 74 72 69 6e | 67 73 29 3b 0d 09 4d 79 |calStrin|gs);..My| |000060b0| 44 69 73 70 6f 73 65 48 | 61 6e 64 6c 65 28 73 6f |DisposeH|andle(so| |000060c0| 72 74 49 6e 66 6f 50 74 | 72 73 29 3b 0d 09 4c 44 |rtInfoPt|rs);..LD| |000060d0| 65 6c 52 6f 77 28 30 2c | 20 30 2c 20 74 68 65 4c |elRow(0,| 0, theL| |000060e0| 69 73 74 29 3b 0d 09 4c | 53 65 74 44 72 61 77 69 |ist);..L|SetDrawi| |000060f0| 6e 67 4d 6f 64 65 28 74 | 72 75 65 2c 20 74 68 65 |ngMode(t|rue, the| |00006100| 4c 69 73 74 29 3b 0d 09 | 72 65 74 75 72 6e 20 65 |List);..|return e| |00006110| 72 72 3b 0d 7d 0d 00 00 | 00 00 00 00 00 00 00 00 |rr;.}...|........| |00006120| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006130| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006140| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006150| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006160| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006170| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006180| 00 00 01 00 00 00 01 54 | 00 00 00 54 00 00 00 46 |.......T|...T...F| |00006190| 00 00 6b de 06 77 69 6e | 64 2e 68 2e 02 00 00 00 |..k..win|d.h.....| |000061a0| 54 45 58 54 4d 4d 43 43 | 01 00 ff ff ff ff 00 00 |TEXTMMCC|........| |000061b0| 08 74 68 72 65 61 64 2e | 63 00 02 00 00 00 54 45 |.thread.|c.....TE| |000061c0| 58 54 4d 4d 43 43 01 00 | 02 90 0a 1d 00 00 00 00 |XTMMCC..|........| |000061d0| 00 00 54 45 58 54 4d 4d | 43 43 01 00 02 90 0a 1d |..TEXTMM|CC......| |000061e0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |000061f0| 00 00 aa 4f 8b 9f 00 00 | 60 96 00 00 01 9a 00 00 |...O....|`.......| |00006200| 00 00 10 00 00 00 6b de | 0a 77 69 6e 64 75 74 69 |......k.|.winduti| |00006210| 6c 2e 63 2e 02 00 00 00 | 54 45 58 54 4d 4d 43 43 |l.c.....|TEXTMMCC| |00006220| 01 00 ff ff ff ff 00 00 | 00 00 6e 40 00 00 00 00 |........|..n@....| |00006230| 3a 53 00 00 40 00 00 00 | 00 00 00 00 00 00 00 00 |:S..@...|........| |00006240| aa 4f 8b b2 aa 4f 8b b5 | 00 00 00 00 00 00 00 00 |.O...O..|........| |00006250| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 60 52 |........|......`R| |00006260| 00 08 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006270| 00 00 00 00 00 00 00 00 | 00 00 10 00 00 00 6b de |........|......k.| |00006280| 00 00 00 48 00 09 4d 6f | 6e 61 63 6f 00 00 00 00 |...H..Mo|naco....| |00006290| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |000062a0| 00 00 00 00 00 00 00 03 | 00 04 fe d9 02 84 02 2b |........|.......+| |000062b0| 04 af fe d9 02 84 02 2b | 04 af ab 85 f6 11 00 00 |.......+|........| |000062c0| 10 29 00 00 10 3e 00 00 | 11 6a 01 00 00 00 00 04 |.)...>..|.j......| |000062d0| 00 01 00 01 00 00 01 00 | 00 00 01 54 00 00 00 54 |........|...T...T| |000062e0| 00 00 00 46 01 3e 4b 38 | 13 d6 00 00 00 1c 00 46 |...F.>K8|.......F| |000062f0| 00 01 4d 50 53 52 00 00 | 00 12 4d 57 42 42 00 00 |..MPSR..|..MWBB..| |00006300| 00 1e 03 ed ff ff 00 00 | 00 00 00 00 00 00 03 f0 |........|........| |00006310| ff ff 00 00 00 4c 00 00 | 00 00 00 00 00 00 00 00 |.....L..|........| |00006320| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006330| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006340| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006350| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006360| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| |00006370| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........| +--------+-------------------------+-------------------------+--------+--------+